61

TL;DR<private> / "Copy Local" オプションが MSBuild でどのように機能するかを詳しく説明している公式ドキュメントはありますか? そして、それに入る値は何ですか?


Visual Studio のあるプロジェクトから別のプロジェクトへのプロジェクト参照追加<ProjectReference Include=".....csproj">すると、.csprojMSBuild ファイルに が追加されます。

Visual Studio の 1 つのプロジェクトからファイル システムのアセンブリ ファイルにファイル参照追加<Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ...すると、.csprojMSBuild ファイルに が追加されます。

どちらの場合も、Visual Studio SettingCopy Local = True|Falseのサブ要素<Private>True</Private>or<Private>False</Private>が追加されます。

ReferenceCommon MSBuild Project ItemsProjectReferenceの下に文書化されているようです:

<ProjectReference>
  Represents a reference to another project.

  Item Name    Description
  -------------------------
   Name         ...
   Project      ...
   Package      ...

<Reference>
  Represents an assembly (managed) reference in the project.

  Item Name     Description
  --------------------------
   HintPath      Optional string. Relative or absolute path of the assembly.
   Name          ...
   ...
   Private       Optional string. Determines whether to copy the file to the output directory. 
                 Values are:
                     1. Never
                     2. Always
                     3. PreserveNewest

あなたはそれに気付くでしょう、

  1. ProjectReference <private>アイテムをまったく文書化していません
  2. Reference TrueまたはFalse可能な値としてリストされていません。

そう。は?<private>このオプションがどのように機能するかを詳細に説明している公式ドキュメントはありますか (良いブログ エントリがあれば幸いです) 。ドキュメントは完全に間違っているのでしょうか、それとももっと何かありますか?


ここに私のVS 2013 Expressからのスニペットの例:

...
  <ItemGroup>
    <Reference Include="ClassLibrary2">
      <HintPath>C:\Somewhere\ClassLibrary2.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System" />
...
  <ItemGroup>
    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj">
      <Project>{861dd746-de2e-4961-94db-4bb5b05effe9}</Project>
      <Name>ClassLibrary1</Name>
      <Private>False</Private>
    </ProjectReference>
...
4

1 に答える 1

21

Reference および ProjectReference アイテムの場合、Private に使用できる値は次のとおりです: True または False

msbuild のこのプロパティは、VS のプロジェクト参照プロパティに Copy Local として対応しています。

VSで参照プロパティを手動で設定し、xmlを表示することで、上記の答えを得ました。プライベート アイテム メタデータの公式ドキュメントが見つかりませんでした。

https://msdn.microsoft.com/en-us/library/bb629388.aspxでドキュメントを確認すると、受け入れられる値が Never、Always、PreserveNewest として表示されます。これらは間違っているようで、Content、None、およびその他のファイル アイテムで使用される CopyLocal メタデータでのみ使用できます。

于 2015-04-17T19:03:46.187 に答える