web-dev-qa-db-ja.com

.NET Core csprojで参照されているNuGetパッケージから出力ディレクトリにファイルをコピーするにはどうすればよいですか?

.NET Core csprojアプリケーションで PhantomJS NuGetパッケージ を使用しようとしています。しかし、NuGetに新しいPackageReference構文を使用することは不可能だと思います。

このようにPhantomJSパッケージを参照すると:

<PackageReference Include="PhantomJS" Version="2.1.1">
  <IncludeAssets>all</IncludeAssets>
</PackageReference>

dotnet buildを実行しても何も起こりません。

PhantomJSパッケージ内のファイルを出力ディレクトリ(またはプロジェクト内の任意の場所)にコピーして、PhantomJSパッケージによって提供されるバイナリファイルを使用できるようにすることを期待しています。

PhantomJS NuGetパッケージの内容をMSBuildを使用して出力ディレクトリにコピーする別の方法はありますか?

11
Ciantic

NuGetの<PackageReference>構文は、project.json構文と同様に、推移的な依存関係を使用します。そのため、同じルールが適用されます。これを参照してください NuGet v これは、packages.configと新しい構文の間で機能するものと機能しないものについて説明しています。具体的には

Install.ps1またはuninstall.ps1が機能することを信頼することはできません。これらのファイルはpackages.configを使用すると実行されますが、v3では無視されます。したがって、パッケージは実行せずに使用できる必要があります。 Init.ps1は引き続きNuGet3で実行されます。

ファイルを出力ディレクトリにコピーするには、 contentFiles を使用するようにPhantomJSNuGetパッケージを変更する必要があります。

3
Eric Erhardt

私はあなたが使いたいと思います:

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

概して <PropertyGroup>。これにより、すべての依存関係が出力フォルダーにコピーされます。つまり、すべての依存関係がコピーされるため、状況によってはかなり混乱する可能性があります。

次に、特定のアセンブリまたはパッケージを除外する場合:

<ItemGroup>
    <-- won't copy to output folder -->
    <PackageReference Include="MahApps.Metro" version="1.6.5">
      <IncludeAssets>compile</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Dragablz" version="0.0.3.203">
      <IncludeAssets>compile</IncludeAssets>
    </PackageReference>
    ... 

    <-- normal will copy to output folder -->
    <PackageReference Include="xmlrpcnet" version="3.0.0.266" />
    <PackageReference Include="YamlDotNet" version="6.0.0" />
</ItemGroup>


<ItemGroup>
    <!-- keep Assembly reference from copying to output -->
    <Reference Include="$(SolutionDir)MarkdownMonster\bin\$(Configuration)\$(TargetFramework)\MarkdownMonster.exe">
      <Private>false</Private>
    </Reference> 
</ItemGroup>

このコンテキストでのcompileは、コンパイルには使用できますが、出力フォルダーにはコピーされないことを意味します。

1
Rick Strahl

dotnet publishをお試しください

dotnet publish [<PROJECT>] [-c|--configuration] [-f|--framework] [--force] [--manifest] [--no-dependencies] [--no-restore] [-o|--output] [-r|--runtime] [--self-contained] [-v|--verbosity] [--version-suffix]
dotnet publish [-h|--help]

https://docs.Microsoft.com/en-us/dotnet/core/tools/dotnet-publish?tabs=netcore2x を参照してください。

0
Bella Li

タグ名は誤解を招く恐れがあります。試してみてください

<PackageReference Include="PhantomJS" Version="2.1.1">
  <IncludeAssets>none</IncludeAssets>
</PackageReference>

または

<PackageReference Include="PhantomJS" Version="2.1.1">
  <ExludeAssets>all</ExcludeAssets>
</PackageReference>

代わりに、参照されるアセンブリやその他のファイルをビルド出力にコピーするために。 https://docs.Microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files を参照してください。

0
JSpot