Come risolvere:L'attività MSBuild personalizzata richiede l'assemblaggio all'esterno di AppBase

StackOverflow https://stackoverflow.com/questions/690432

Domanda

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.

Il problema è che MyCommon.dll si trova in "..\Common\MyCommon.dll" rispetto a MyTask.dll, che lo colloca all'esterno della directory AppBase per il processo MSBuild.Ho confermato che questo è effettivamente il problema analizzando il registro di MSBuild e visualizzando il rapporto di Fusion sull'errore di associazione.

Cosa posso fare per fare in modo che Fusion trovi MyCommon.dll durante il processo di creazione?Tieni presente che lo spostamento dell'assembly interromperebbe la mia app, che dipende anche da questo.

AGGIORNAMENTO:Beh, sembra che alla fine userò una copia.Tutte le altre soluzioni richiedono modifiche a livello di sistema, il che non è realmente giustificato in questo caso.

È stato utile?

Soluzione

Quindi copiarlo, invece? Solo un pensiero. Avere una copia lì solo per sostenere la costruzione di eliminare una volta che hai finito con esso.

Altri suggerimenti

Vedo molteplici soluzioni:

1°: Aggiungi l'assembly nel GAC (l'assembly deve avere un nome sicuro)

gacutil /I <assembly name> 

2°: Individuare l'assieme attraverso Basi di codici o sondaggi, nel tuo macchina.config file o 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°: copia l'assembly nella stessa directory prima ed eliminalo dopo, come ha detto David M.

Una possibilità è quella di utilizzare ILMerge a fondersi la dipendenza nel gruppo compito.

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

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

È possibile definire un UsingTask personalizzato:

<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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top