TFS 2010 msbuild перезаписывает разные версии указанной библиотеки в выходном каталоге - PullRequest
2 голосов
/ 21 сентября 2011

Я создаю веб-проект с использованием TFS 2010. Проект содержит клиент Silverlight и серверную часть .NET / C #.Оба они (клиент и сервер) ссылаются на одну стороннюю библиотеку, для которой у нас есть версии Silverlight и .NET, но обе версии используют одно и то же имя.Проблема в том, что msbuild с указанным свойством outdir помещает все библиотеки в одну плоскую иерархию в выходном каталоге, поэтому одна библиотека перезаписывает другую.

Я знаю, что одним из решений будет изменение шаблона сборки, а не указание outdir, ноэто приводит к проблемам с другими частями шаблона сборки (у меня были проблемы с модульными тестами, и я читал о людях, у которых возникают проблемы с размещением вывода на _PublishedWebsites).

Другой обходной путь - переименовать эту библиотеку / библиотеки, чтобы именане будет сталкиваться.Но это не будет решением, если таких библиотек будет много.

Я бы хотел найти какое-то чистое решение.Вы знаете какой-нибудь изящный способ, как это решить?

1 Ответ

0 голосов
/ 22 сентября 2011

Согласно Microsoft существует (как минимум) три способа ссылки на сборки:

  • установить сборку в GAC
  • указать сборку в конфигурации приложения
  • или используйте событие AssemblyResolve

GAC здесь не вариант, так как у вас будет та же проблема (с такими же именами).

Использование события AssemblyResolve и затем использование Assembly.Возможно, LoadFrom мог бы сделать это, но имхо было бы проще ...

... сделать это вторым упомянутым способом: указать сборку в конфигурации приложения.Здесь вы в основном редактируете App.config следующим образом:

<configuration>
   <runtime>
       <assemblyBinding xmlns=”urn:schemas-microsoft-com:asm.v1″>
         <probing privatePath=”bin;Silverlight;ParentFolder\SubFolder;”/>
      </assemblyBinding>
   </runtime>
</configuration>

, и приложение будет искать сборки в указанных каталогах.

Таким образом, вы можете создавать определенные папки (возможно, «NET»).и «Silverlight» и т. п.), скопируйте соответствующую сборку в эту папку и найдите сборку в соответствующей папке, как описано выше.

Учитывая, что в конфигурации приложения не указана ссылка, приложение будетзаглянув либо в ту же папку, что и ссылочная сборка , либо в папку с именем ссылочной сборки, вы также можете просто создать 2 папки с тем же именем, что и соответствующее приложение (например, «Клиент» и «Сервер ", если они называются" Client.exe "и" Server.exe ") и скопируйте соответствующую сборку в эту папку.В этом случае даже не потребуется изменять файл конфигурации приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...