22

継承したプロジェクトのフォルダー/ファイル構造をクリーンアップする過程で、必要な外部ライブラリを整理する際に問題が発生しています。それらを独自の.\dll\フォルダーに保持したいのですが、ビルドディレクトリに正しくコピーされていません。それらはルート ビルド ディレクトリにあるはずですが、代わりにサブフォルダーに移動されています。

私の.csprojファイルには次のxmlが含まれています:

<Project>
  <ItemGroup>
    <None Include="dlls\libraryA.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

次に、ビルド時にlibraryA.dllファイルがフォルダーにコピーされますが、bin\Debug\dll\フォルダーに入れたいですbin\Debug\

4

4 に答える 4

23

私はこれを試しましたが、msbuild は常にディレクトリ パスを使用してファイルをコピーしたいと考えていますが、回避策があります...

csproj ファイルを編集し、次の行の後に:

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

次の行を追加します。

  <PropertyGroup>
    <PrepareForRunDependsOn>$(PrepareForRunDependsOn);MyCopyFilesToOutputDirectory</PrepareForRunDependsOn>
  </PropertyGroup>

  <Target Name="MyCopyFilesToOutputDirectory">
    <Copy SourceFiles="@(None)" DestinationFolder="$(OutDir)" />
  </Target>

出力ファイルのコピーは、PrepareForRun ターゲットで発生します。これにより、独自のターゲットが、PrepareForRun の一部として実行されるターゲットのリストに追加されます。

この例では、None アイテム グループのすべてのアイテムをコピーします。独自のアイテム グループ (MyFiles など) を作成し、コピーしたくない "None" ファイルが他にある場合は、そのアイテム グループでコピーを実行できます。これを試したとき、csproj ファイルを直接編集して項目グループ名を変更する必要がありました。Visual Studio では UI からファイルのアイテム グループを設定できませんでしたが、csproj を編集して変更した後、Visual Studio はカスタム アイテム グループ名を正しく表示しました。

于 2011-05-06T21:46:20.417 に答える