Как решить: пользовательская задача MSBuild требует сборки вне AppBase - PullRequest
6 голосов
/ 27 марта 2009

У меня есть пользовательская задача, которую я хочу выполнить при создании моих проектов на C #. Эта задача находится в MyTask.dll, которая ссылается на другую сборку, MyCommon.DLL.

Проблема в том, что MyCommon.dll находится по адресу ".. \ Common \ MyCommon.dll" относительно MyTask.dll, что ставит его вне каталога AppBase для процесса MSBuild. Я подтвердил, что это действительно проблема, проанализировав журнал MSBuild и просмотрев отчет Fusion об ошибке привязки.

Что я могу сделать, чтобы Fusion находил MyCommon.dll в процессе сборки? Обратите внимание, что перемещение сборки может сломать мое приложение, что также зависит от него.

ОБНОВЛЕНИЕ: Ну, кажется, я пойду с использованием копии в конце концов. Другие решения требуют общесистемных модификаций, что на самом деле не является гарантией.

Ответы [ 4 ]

2 голосов
/ 27 марта 2009

Так скопируйте это вместо этого? Просто мысль. Имейте там копию, чтобы поддержать сборку, которую вы удалите, как только закончите.

1 голос
/ 27 марта 2009

Я вижу несколько решений:

1-й: Добавьте сборку в GAC (ваша сборка должна иметь строгое имя)

gacutil /I <assembly name> 

2nd: Найдите сборку через Кодовые базы или зондирование , в файле machine.config или в 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-й: скопируйте сборку в тот же каталог до и удалите ее после, как сказал Дэвид М.

0 голосов
/ 11 сентября 2012

Можно использовать ILMerge для объединения зависимости в сборку задачи.

0 голосов
/ 21 июля 2009

Все эти «решения» создают больше зависимостей, которые усложняют окружающую среду. Должен быть более простой способ обновить путь зондирования во время выполнения.

В частности, MSBuild должен позволять вам добавлять пробные пути в файл .proj или указывать зависимые библиотеки

Вы можете определить пользовательские задачи:

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

но вы не можете добавить зависимости? это должно быть включено ... здесь с чем-то вроде

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

Но нет, это не поддерживается ...

...