Msbuild 如何将文件从.NET Core csproj中引用的NuGet包复制到输出目录?
我正在尝试在.NET核心csproj应用程序中使用。但我认为不可能为NuGet使用新的Msbuild 如何将文件从.NET Core csproj中引用的NuGet包复制到输出目录?,msbuild,.net-core,csproj,Msbuild,.net Core,Csproj,我正在尝试在.NET核心csproj应用程序中使用。但我认为不可能为NuGet使用新的PackageReference语法 当我像这样引用PhantomJS包时: <PackageReference Include="PhantomJS" Version="2.1.1"> <IncludeAssets>all</IncludeAssets> </PackageReference> 全部的 当我运行dotnet build时,它不会做任何事
PackageReference
语法
当我像这样引用PhantomJS包时:
<PackageReference Include="PhantomJS" Version="2.1.1">
<IncludeAssets>all</IncludeAssets>
</PackageReference>
全部的
当我运行dotnet build
时,它不会做任何事情
我希望它将PhantomJS包中的文件复制到输出目录(或项目中的任何地方),这样我就可以使用PhantomJS包提供的二进制文件
是否有其他方法可以使用MSBuild将PhantomJS NuGet包的内容复制到输出目录?NuGet中的
语法使用可传递的依赖项,就像project.json
语法一样。因此,同样的规则也适用。请看这篇文章,它讨论了在packages.config
和更新的语法之间什么起作用,什么不起作用。具体地
您不能依靠install.ps1或uninstall.ps1来运行。这些文件将在使用packages.config时执行,但在v3中会被忽略。因此,您的包需要在不运行它们的情况下可用。Init.ps1仍将在NuGet 3上运行
要将文件复制到输出目录,需要将
PhantomJS
NuGet包更改为使用。尝试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]
dotnet publish[]-c |--配置]-[f |--框架][--强制][--清单][--无依赖关系][--无恢复]-[o |--输出]-[r |--运行时][--自包含]-[v |--详细性][--版本后缀]
dotnet发布[-h |--帮助]
请参见我想您应该使用:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
true
在主
中,这会导致将所有依赖项复制到输出文件夹。这意味着每一个依赖项都会被复制,因此在某些情况下这可能会非常混乱
如果要排除特定的程序集或程序包,请执行以下操作:
<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>
标签名称具有误导性。试一试
<PackageReference Include="PhantomJS" Version="2.1.1">
<IncludeAssets>none</IncludeAssets>
</PackageReference>
没有一个
或
全部的
而是为了将引用的程序集和其他文件复制到生成输出。看见
有两种解决方案:
1:
2:
首选#2,因为如果此项目被另一个项目引用,也可以将.exe复制到输出文件夹谢谢。我认为这真的很不幸。我认为期望所有包都更改其nuspec是不现实的,如果PackageReference具有复制给定目录或文件的功能(例如,复制到输出目录),则会更好。我会保持这一点,msbuild中有各种技巧可以实现这一点。有人有关于如何使用contentFiles的示例nuspec文件吗?以下是msbuild的repo中的示例:感谢您在运行dotnet build时将文件放入bin文件夹。向前迈出了一小步。
<PackageReference Include="PhantomJS" Version="2.1.1">
<ExludeAssets>all</ExcludeAssets>
</PackageReference>
<ItemGroup>
<PackageReference Include="PhantomJS" Version="1.0.8" GeneratePathProperty="true" />
</ItemGroup>
<Target Name="CopyPdfExe" AfterTargets="Build">
<Copy SourceFiles="(PkgPhantomJS)\tools\phantomjs\phantomjs.exe" DestinationFolder="$(OutDir)" />
</Target>
<ItemGroup>
<PackageReference Include="PhantomJS" Version="1.0.8" GeneratePathProperty="true" />
</ItemGroup>
<ItemGroup>
<None Include="$(PkgPhantomJS)\tools\phantomjs\phantomjs.exe" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>