Wie zu lösen: Benutzerdefinierte MSBuild Aufgabe Montage außerhalb von AppBase erfordert
-
22-08-2019 - |
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.
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 ...