Pergunta

Eu tenho uma tarefa personalizada que eu quero executar quando a construção de meus projetos C #. Esta tarefa está localizado na MyTask.dll, que faz referência a outro assembly, MyCommon.DLL.

O problema é que MyCommon.dll está localizado na ".. \ Common \ MyCommon.dll" em relação ao MyTask.dll, o que o coloca fora do dir AppBase para o processo de MSBuild. Eu já confirmou que este é verdadeiramente o problema através da análise de log do MSBuild e vendo relatório do Fusion sobre a falha de ligação.

O que posso fazer para tornar Fusão achado MyCommon.dll durante o processo de criação? Note-se que se deslocam a montagem iria quebrar meu aplicativo, que também depende disso.

UPDATE: Bem, parece que eu vou com usando uma cópia afinal. Outras soluções requerem modificações em todo o sistema, que não é realmente garantidos aqui.

Foi útil?

Solução

Assim, copiá-lo em vez disso? Apenas um pensamento. Ter uma cópia lá apenas para apoiar a compilação que você excluir uma vez que você está feito com ele.

Outras dicas

Eu vejo várias soluções:

1: Adicione o assembly no GAC (sua montagem deve ter um nome forte)

gacutil /I <assembly name> 

2: Localize o conjunto através bases de código ou sondagem , em sua machine.config arquivo ou em 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º: copiar a montagem no mesmo diretório antes e excluí-lo depois, como David M disse

.

Uma opção é usar ILMerge para merge a dependência para a tarefa de montagem.

Todas estas "soluções" criar mais dependências que complicam o ambiente. Deve haver uma maneira mais fácil para atualizar o caminho sondagem em tempo de execução ..

Especificamente MSBuild deve permitir que você adicione sondagem caminhos no seu arquivo proj, ou para especificar as DLLs dependentes

Você pode definir um costume UsingTask:

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

mas você não pode adicionar dependências? ele deve ser incluído ... aqui com algo como

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

Mas, não, isto não é suportado ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top