Question

J'ai une tâche personnalisée que je veux exécuter mes projets lors de la construction C #. Cette tâche est situé dans MyTask.dll, qui fait référence à une autre assemblée, MyCommon.DLL.

Le problème est que MyCommon.dll est situé à « .. \ Common Files \ MyCommon.dll » par rapport à MyTask.dll, qui le met en dehors du répertoire AppBase pour le processus MSBuild. Je l'ai confirmé que c'est en effet le problème en analysant le journal de MSBuild et de voir le rapport de fusion sur l'échec de liaison.

Que puis-je faire pour trouver Fusion MyCommon.dll au cours du processus de construction? Notez que déplacer l'ensemble briserait mon application, ce qui en dépend également.

Mise à jour: Eh bien, il semble que je vais à l'aide d'une copie afterall. D'autres solutions nécessitent toutes les modifications du système à l'échelle, ce qui est pas vraiment justifié ici.

Était-ce utile?

La solution

Il copie au lieu? Juste une pensée. Avoir une copie là juste pour soutenir la construction que vous supprimez une fois que vous avez terminé avec elle.

Autres conseils

Je vois plusieurs solutions:

1er: Ajouter l'assemblage dans le GAC (votre assemblée doit avoir un nom fort)

gacutil /I <assembly name> 

2 Repérez l'ensemble à travers codebases ou sonder , dans votre machine.config fichier ou msbuild.exe.config.

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyCommon"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <codeBase version="2.0.0.0"
                      href="file://C:/yourpath/MyCommon.DLL"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

3:. copier l'ensemble dans le même répertoire avant et après le supprimer, comme David M dit

Une option consiste à utiliser ILMerge fusionner la dépendance à l'ensemble des tâches.

Toutes ces « solutions » créer plus de dépendances qui compliquent l'environnement. Il devrait y avoir un moyen plus facile de mettre à jour le chemin de sondage lors de l'exécution ..

Plus précisément MSBuild devrait vous permettre d'ajouter des chemins de sondage dans votre fichier .proj, ou de préciser les dll dépendants

Vous pouvez définir une coutume UsingTask:

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll" />

mais vous ne pouvez pas ajouter des dépendances? il devrait être inclus ... ici avec quelque chose comme

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll">
<DependantAssembly AssemblyFile="dependant.dll"/>
</UsingTask>

Mais, ce n'est pas pris en charge ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top