Frage

Ich habe eine benutzerdefinierte Aufgabe, die ich ausführen will, wenn meine C # Projekte an. Diese Aufgabe liegt in MyTask.dll, die eine andere Assembly verweist, MyCommon.DLL.

Das Problem ist, dass MyCommon.dll befindet sich im ".. \ Common \ MyCommon.dll" relativ zu MyTask.dll, die sie außerhalb des AppBase dir für MSBuild Prozess setzt. Ich habe bestätigt, dass dies in der Tat das Problem durch MSBuild Logbuch Analyse und Fusion Bericht über die Bindungsversagen zu sehen.

Was kann ich tun, um Fusion MyCommon.dll während des Build-Prozesses zu finden? Beachten Sie, dass der Montag bewegen würde meinen app brechen, die davon abhängt auch.

UPDATE: Nun, es scheint, dass ich afterall mit der Verwendung einer Kopie gehen werde. Andere Lösungen erfordern alle systemweite Änderungen, die hier nicht wirklich gerechtfertigt ist.

War es hilfreich?

Lösung

kopieren Sie es also stattdessen? Nur ein Gedanke. Haben Sie eine Kopie dort nur zur Unterstützung des Build, die Sie löschen, sobald Sie damit fertig sind.

Andere Tipps

Ich sehe mehrere Lösungen:

1. Fügen Sie die Assembly im GAC (die Assembly muss einen starken Namen haben)

gacutil /I <assembly name> 

2.: Suchen Sie die Montage durch Codebases oder Sondieren , in Ihrem machine.config Datei oder in 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.:. , bevor die Montage im gleichen Verzeichnis kopieren und nach löschen, wie David M sagte

Eine Option ist verwenden ILMerge zu fusionieren die Abhängigkeit in der Task-Montage.

Alle diese „Lösungen“ mehr Abhängigkeiten schaffen, die die Umwelt erschweren. Es soll ein einfacher Weg, um die Sondierung Weg zur Laufzeit zu aktualisieren ..

Insbesondere sollte MSBuild können Sie Antastwege in Ihrer .proj Datei hinzuzufügen, oder die abhängigen DLLs angeben

Sie können eine benutzerdefinierte Usingtask definieren:

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

aber man kann Abhängigkeiten hinzufügen? sollte es mit so etwas wie

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

Aber nein ist dies nicht unterstützt ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top