Pregunta

Tengo una tarea personalizada que quiero ejecutar al crear mis proyectos de C#.Esta tarea se encuentra en MyTask.dll, que hace referencia a otro ensamblado, MyCommon.DLL.

El problema es que MyCommon.dll está ubicado en "..\Common\MyCommon.dll" en relación con MyTask.dll, lo que lo coloca fuera del directorio de AppBase para el proceso MSBuild.Confirmé que este es efectivamente el problema al analizar el registro de MSBuild y ver el informe de Fusion sobre el error de enlace.

¿Qué puedo hacer para que Fusion encuentre MyCommon.dll durante el proceso de compilación?Tenga en cuenta que mover el ensamblaje rompería mi aplicación, que también depende de ello.

ACTUALIZAR:Bueno, parece que después de todo usaré una copia.Todas las demás soluciones requieren modificaciones en todo el sistema, lo que realmente no se justifica aquí.

¿Fue útil?

Solución

Así que copiarlo en su lugar? Solo un pensamiento. Tener una copia no sólo para apoyar la compilación que se elimina una vez que haya terminado con él.

Otros consejos

Veo múltiples soluciones:

1º: Agregue el ensamblado en el GAC (su ensamblado debe tener un nombre seguro)

gacutil /I <assembly name> 

2do: Ubique el conjunto a través Bases de código o sondeo, en tus máquina.config archivo o en 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>

3ro: copie el ensamblado en el mismo directorio antes y elimínelo después, como dijo David M.

Una opción es usar ILMerge fusionar la dependencia en el conjunto de tareas.

Todas estas "soluciones" crear más dependencias que complican el medio ambiente. Debe haber una manera más fácil de actualizar la trayectoria de sondeo en tiempo de ejecución ..

En concreto MSBuild debería permitirle agregar caminos de sondeo en su archivo .proj, o para especificar los archivos DLL dependientes

Se puede definir una costumbre UsingTask:

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

, pero usted no puede agregar dependencias? debe incluirse aquí ... con algo como

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

Sin embargo, no esto no es compatible ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top