У меня есть четыре проекта в моем решении Visual Studio (каждый из них нацелен на .NET 3.5) - для моей проблемы важны только эти два:
- MyBaseProject < - эта библиотека классов ссылается на сторонний DLL файл (elmah.dll)
- MyWebProject1 < - этот проект веб-приложения имеет ссылку на MyBaseProject
Я добавил ссылку elmah.dll в MyBaseProject в Visual Studio 2008, нажав "Добавить ссылку..." → вкладку "Обзор" → выбрав "elmah.dll".
Свойства ссылки Elmah следующие:
- Псевдонимы - глобальные
- Копировать локальный - true
- Культура -
- Описание - Модули регистрации ошибок и обработчики (ELMAH) для ASP.NET
- Тип файла - сборка
- Путь - D:\webs\otherfolder\_myPath\__ tools\elmah\Elmah.dll
- Решено - верно
- Версия исполнения - v2.0.50727
- Указанная версия - false
- Сильное имя - false
- Версия - 1.0.11211.0
В MyWebProject1 Я добавил ссылку на Project MyBaseProject: "Добавить ссылку..." → вкладка "Проекты" → выберите "MyBaseProject". Свойства этой ссылки те же, кроме следующих элементов:
- Описание -
- Путь - D:\webs\CMS\MyBaseProject\bin\Debug\MyBaseProject.dll
- Версия - 1.0.0.0
Если я запустил сборку в Visual Studio, файл elmah.dll будет скопирован в мой каталог MyWebProject1 bin вместе с MyBaseProject.dll!
Однако, если я очистил и запустил MSBuild для решения (через D:\webs\CMS > C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe/t: ReBuild/p: Конфигурация = Отладка MyProject.sln) elmah.dll отсутствует в каталоге bin MyWebProject1, хотя сама сборка не содержит никаких предупреждений или ошибок!
Я уже убедился, что .csproj MyBaseProject содержит элемент private со значением "true" (это должен быть псевдоним для " скопировать локальный" в Visual Номер-студио):
<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>
(Частный тег по умолчанию не появился в .csproj xml, хотя Visual Studio сказал "скопировать локальный" true. Я переключил "скопировать локальный" на false - сохранен - и снова вернул его в true - save! )
Что не так с MSBuild? Как получить ссылку (elmah.dll), скопированную в bin MyWebProject1?
Я НЕ хочу добавлять действие копии postbuild для каждой команды postbuild проекта! (Представьте, что у меня было бы много проектов, зависящих от MyBaseProject!)