2009-03-27 8 views
5

Mam niestandardowe zadanie, które chcę wykonać podczas budowania moich projektów C#. To zadanie znajduje się w pliku MyTask.dll, który odwołuje się do innego zestawu, MyCommon.DLL.Sposób rozwiązywania: Niestandardowe zadanie MSBuild wymaga złożenia poza AppBase

Problem polega na tym, że plik MyCommon.dll znajduje się w ".. \ Common \ MyCommon.dll" w stosunku do MyTask.dll, co umieszcza go poza katalogiem AppBase dla procesu MSBuild. Potwierdziłem, że to jest rzeczywiście problem, analizując dziennik MSBuild i widząc raport Fusion o niepowodzeniu wiązania.

Co mogę zrobić, aby aplikacja Fusion znajdowała plik MyCommon.dll podczas procesu kompilacji? Zauważ, że przeniesienie zespołu złamałoby moją aplikację, co również zależy od tego.

AKTUALIZACJA: Cóż, wygląda na to, że wykorzystam kopię. Inne rozwiązania wymagają modyfikacji w całym systemie, co nie jest tutaj uzasadnione.

Odpowiedz

2

Więc skopiuj zamiast tego? Tylko myśl. Miej tam kopię tylko po to, aby obsługiwać kompilację, którą usuwasz, gdy skończysz.

+0

Tak, oszczędzam to do wykorzystania w ostateczności. Czuje się niepewnie i mam nadzieję, że jest lepszy sposób. :) – aoven

+0

Uzgodnione. Ale żaden nie mogę myśleć ze smutkiem. Zobaczymy, co wymyśli reszta. –

1

Widzę kilka rozwiązań:

1st: Dodaj zespół w GAC (Twój zespół musi mieć silną nazwę)

gacutil /I <assembly name> 

2-ty: Znajdź zespół przez Codebases or Probing, w Twój plik machine.config lub 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-ty: skopiować zespół w tym samym katalogu, przed i po go usunąć, jak David M powiedział.

-1

Wszystkie te "rozwiązania" tworzą więcej zależności, które komplikują środowisko. Nie powinno być łatwiejszy sposób, aby zaktualizować próbkowania ścieżki w czasie wykonywania ..

Konkretnie MSBuild powinno pozwolić na dodanie ścieżki próbkowania w pliku .proj lub określić zależnych bibliotek DLL

Można zdefiniować niestandardowy UsingTask :

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

ale mogę dodać zależności? powinny być włączone ... tutaj z czymś

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

ale nie to nie jest obsługiwany ...

0

Opcja jest użycie ILMerge scalić zależność do zespołu zadaniowego.

Powiązane problemy