У меня есть четыре проекта в моем решении Visual Studio (все ориентированы на .NET 3.5) - для моей проблемы важны только эти два:
- MyBaseProject <- эта библиотека классов ссылается на сторонний DLL-файл (elmah.dll) </li>
- MyWebProject1 <- этот проект веб-приложения имеет ссылку на MyBaseProject </li>
Я добавил ссылку elmah.dll на MyBaseProject в Visual studio 2008, нажав «Добавить ссылку ...» → вкладку «Обзор» → выбрав «elmah.dll».
Свойства ссылки на Эльму следующие:
- Псевдонимы - глобальные
- Копировать локально - true
- Культура -
- Описание - Модули и обработчики ошибок (ELMAH) для ASP.NET
- Тип файла - Сборка
- Путь - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- Решено - Верно
- Runtime версия - v2.0.50727
- Указанная версия - false
- Сильное имя - ложь
- Версия - 1.0.11211.0
В MyWebProject1 Я добавил ссылку на проект MyBaseProject:
«Добавить ссылку ...» → вкладка «Проекты» → выбрать «MyBaseProject». Свойства этой ссылки те же, за исключением следующих элементов:
- Описание -
- Путь - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- Версия - 1.0.0.0
Если я запускаю сборку в Visual Studio , файл elmah.dll копируется в мою папку bin MyWebProject1 вместе с MyBaseProject.dll!
Однако, если я очищаю и запускаю MSBuild для решения (через D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: Configuration = Debug MyProject.sln)
elmah.dll отсутствует в каталоге bin MyWebProject1 - хотя сама сборка не содержит предупреждений или ошибок!
Я уже убедился, что .csproj MyBaseProject содержит элемент private со значением "true" (это должен быть псевдоним для " copy local " в Visual Studio) :
<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
**<Private>true</Private>**
</Reference>
(Закрытый тег не появился в XML-файле .csproj по умолчанию, хотя Visual Studio сказала «копировать локальный» в значение true. Я переключил «копировать локальный» в значение «ложь» - сохранено - и снова установило значение «истина» - сохранить! )
Что не так с MSBuild? Как получить ссылку (elmah.dll), скопированную в корзину MyWebProject1?
Я НЕ хочу добавлять действие копирования после сборки в команду каждого проекта после сборки! (Представьте, что многие проекты зависят от MyBaseProject!)