2008-12-16 7 views
9

Je voudrais mettre en œuvre un événement post construction qui effectue les actions suivantesVS Poster Créer événement

  1. Une copie de chemin relatif de la sortie de DLL (1 fichier, pas tout le jazz debug)
  2. Un registre la DLL de sortie à GAC

Comment cela est-il fait?

Répondre

15

Est-ce que c'est ce que vous voulez?

copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll 
regasm $(TargetPath) 

(entrée dans le champ pour l'étape post-construction dans les propriétés du projet)

+7

Sur Microsoft Visual Studio 2010, cela échouera avec une erreur 9009: vous devez utiliser le chemin d'accès complet à regasm, comme suit: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm.exe $ (TargetPath) – Contango

1

vous pouvez regarder MS construire. C'est ce que nous utilisons ici au travail.

CodeProject Link & MSDN Ref

+0

Oui, MSBuild est excellent pour ça. Si vous souhaitez rester dans Visual Studio, vous pouvez également entrer des commandes post-construction dans les propriétés du projet. –

7

suivant dans Entrez "Projet Propriétés-> Construire Events-> Publier construire la ligne de commande des événements:"

xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)" 

ou ajouter extrait suivant du dossier de projet (par exemple csproj)

<PropertyGroup> 
    <PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent> 
</PropertyGroup> 

Notez qu'il est recommandé d'ajouter "" autour de la commande de copie argume nts pour éviter les problèmes avec les chemins contenant des espaces. Notez également que plusieurs commandes peuvent être combinées en utilisant & &

5

Etes-vous sûr de vouloir faire cela dans le cadre d'une compilation? Je recommanderais d'utiliser des références de projet dans des solutions plutôt que le GAC si vous pouvez l'éviter. La copie de fichiers est une chose, mais l'enregistrement dans le GAC est assez intrusif et vous pouvez considérer les autres environnements dans lesquels votre code est compilé. Des choses comme les machines des autres développeurs et les environnements de test/build servers etc. vraiment vous devriez utiliser quelque chose comme NAnt avec une sorte de serveur d'intégration continue.

2

je devais même question et je luttais un peu pour faire cela fonctionne.

Dans mon cas, je voulais faire le d'une autre manière autour de qui copie la DLL SDL dans mon dossier de sortie.

copy "$(SolutionDir)SDL\lib\x86\SDL.dll" "$(SolutionDir)$(Configuration)\" 

Notez que, $(Configuration) sera votre dossier de sortie (par exemple Debug ou Release). Les citations étaient ce qui me manquait, apparemment vous en avez besoin quand le côté droit se termine par \. Ainsi, il pourrait être plus sûr de toujours les utiliser.

Espérons sauver quelqu'un d'autre 5 minutes!

P.S. J'utilise Visual Studio 2010

0

Ran dans un problème connexe. Les réponses ici ont aidé (merci!).

Mon scénario consistait à déboguer une application dépendante du MEF dont j'avais besoin pour avoir les DLL associées à un emplacement particulier. J'ai rencontré un problème lors de l'écrasement de la version précédente, de sorte que j'ai dû ajouter une suppression au script.

delete $(SolutionDir)FileService\$(ProjectName).dll 
copy $(TargetPath) $(SolutionDir)FileService\$(ProjectName).dll 

Espérons que ça aide aussi quelqu'un!

Questions connexes