2009-03-27 6 views
5

Ho un'attività personalizzata che desidero eseguire durante la creazione dei miei progetti C#. Questa attività si trova in MyTask.dll, che fa riferimento a un altro assembly, MyCommon.DLL.Come risolvere: l'attività MSBuild personalizzata richiede l'assemblaggio all'esterno di AppBase

Il problema è che MyCommon.dll si trova in ".. \ Common \ MyCommon.dll" relativo a MyTask.dll, che lo colloca all'esterno della directory AppBase per il processo MSBuild. Ho confermato che questo è davvero il problema analizzando il log di MSBuild e vedendo il rapporto di Fusion sull'errore di binding.

Cosa posso fare per fare in modo che Fusion trovi MyCommon.dll durante il processo di compilazione? Tieni presente che lo spostamento dell'assieme potrebbe interrompere la mia app, che dipende anche da esso.

AGGIORNAMENTO: Beh, mi sembra di usare una copia dopotutto. Altre soluzioni richiedono tutte modifiche a livello di sistema, il che non è veramente giustificato qui.

risposta

2

Quindi copiarlo invece? Solo un pensiero. Avere una copia lì solo per supportare la build che si elimina una volta che hai finito con esso.

+0

Sì, lo sto salvando da usare come ultima risorsa. Sembra goffo e spero che ci sia un modo migliore. :) – aoven

+0

concordato. Ma a nessuno riesco a pensare tristemente. Vedremo cosa gli viene fuori il resto. –

1

vedo soluzioni multiple:

1 °: Aggiungere l'assembly nella GAC ​​(l'assembly deve avere un nome sicuro)

gacutil /I <assembly name> 

2 °: Individuare il montaggio passante Codebases or Probing, in il tuo file machine.config o 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 °: copiare l'assembly nella stessa directory prima ed eliminarlo dopo, come David M ha detto.

-1

Tutte queste "soluzioni" creano più dipendenze che complicano l'ambiente. Ci dovrebbe essere un modo più semplice per aggiornare il percorso di sondaggio in fase di esecuzione ..

particolare MSBuild dovrebbe consentire di aggiungere percorsi di sondaggio nel file .proj, o per specificare le DLL dipendenti

È possibile definire una consuetudine UsingTask :

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

ma non puoi aggiungere le dipendenze? dovrebbe essere inclusa ... qui con qualcosa di simile

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

Ma, no questo non è supportato ...

0

Un'opzione è quella di utilizzare ILMerge per unire la dipendenza nel gruppo compito.

Problemi correlati