私の Visual Studio ソリューションには 4 つのプロジェクトがあります (全員が .NET 3.5 を対象としています)。私の問題では、次の 2 つだけが重要です。
- MyBaseProject <- このクラス ライブラリは、サードパーティの DLL ファイル (elmah.dll) を参照します。
- MyWebProject1 <- この Web アプリケーション プロジェクトには MyBaseProject への参照があります
「参照の追加...」→「参照」タブ→「elmah.dll」を選択して、Visual Studio 2008のMyBaseProjectへのelmah.dll参照を追加しました。
Elmah 参照のプロパティは次のとおりです。
- エイリアス - グローバル
- ローカルにコピー - true
- 文化 -
- 説明 - ASP.NET のエラー ログ モジュールとハンドラー (ELMAH)
- ファイルの種類 - アセンブリ
- パス - D:\webs\otherfolder\_myPath\__tools\elmah\Elmah.dll
- 解決済み - 真
- ランタイム バージョン - v2.0.50727
- 指定されたバージョン - false
- 厳密な名前 - false
- バージョン - 1.0.11211.0
MyWebProject1で、「参照の追加...」→「プロジェクト」タブ→「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:Configuration=Debug MyProject.sln 経由) ) elmah.dll がMyWebProject1 の bin ディレクトリにありません - ビルド自体には警告やエラーは含まれていません!
MyBaseProject の .csproj に、値が「true」のプライベート要素が含まれていることを確認しました (これは、Visual Studioの「 copy local 」のエイリアスである必要があります)。
<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 に戻して保存します!)
MSBuild の何が問題になっていますか? (elmah.dll) 参照を MyWebProject1 のビンにコピーするにはどうすればよいですか?
すべてのプロジェクトのビルド後のコマンドにビルド後のコピー アクションを追加したくありません。(MyBaseProject に依存する多くのプロジェクトがあると想像してください!)