我在构建后事件中使用此命令从项目生成 nuget 包。变量 %conf%
设置为正确的配置(调试或发布),%1
是项目名称(例如“MyCompany.MyProject”)。
nuget pack -Prop Configuration=%conf% "%1.csproj" -exclude *.sql -IncludeReferencedProjects
此包仅供我们自己使用,永远不会在 nuget 上发布。它以我们的私有(private)存储库结束。
在项目中,有一个文件设置为生成操作:内容
和复制本地:始终
。 (我的 Visual Studio 是法语的,所以我不能 100% 确定翻译)。我们将其命名为 importantfile.xml
。
在生成的包中,我最终得到以下结构:
- content
- importantfile.xml
- lib
-net45 (.NetFramework,Version=v4.5)
-MyCompany.MyProject.dll
这很好,我希望将 importantfile.xml
部署到包中,因为这个文件很重要!
当我在另一个项目中安装该包时,importantfile.xml
部署在项目的根目录下。没关系。但它没有设置为始终复制本地
。
我需要在安装包的项目中importantfile.xml
复制本地:始终
。
我怎样才能实现这一目标?
注释:
我可以在安装软件包后立即在文件上设置copy local :always
,这没什么大不了的。如果以后的包更新会让这个属性保持原样,我会接受它,但事实并非如此。更新软件包时,copy local
会重置为 never
(如所述 here )。
项目文件夹中有一个 nuspec 文件,如下:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<copyright>Copyright 2014</copyright>
<tags>some random tags</tags>
</metadata>
</package>
最佳答案
除了使用 PowerShell 脚本,另一种方法是使用 MSBuild targets or props file与包 ID 同名:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)importantfile.xml">
<Link>importantfile.xml</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
然后在 nuspec 文件中,不要将所需文件添加到 Content
目录,而是将它们与目标文件一起添加到 Build
目录。
- 构建
- 重要文件.xml
- MyPackage.targets
- 库
- net45
- MyAssembly.dll
- net45
如果您需要针对不同架构的不同内容,则可以在 Build
下添加架构文件夹,每个文件夹都有自己的目标文件。
通过 PowerShell 脚本在 NuGet Content
目录中使用目标文件的好处:
- Visual Studio 中的项目中未显示所需的内容文件
- 内容文件链接到而不是复制到引用 NuGet 包的每个项目的目录中(防止存在多个副本并保持与 NuGet 包中的程序集/库相同的行为)
- PowerShell 脚本仅适用于 Visual Studio 和 aren't run when NuGet is run from the commandline (构建服务器、其他 IDE 和其他操作系统),这种方法将适用于任何地方
- PowerShell 安装脚本为 not supported in NuGet 3.x project.json system .
关于visual-studio - 将 nuget 包中的内容文件设置为 "copy local : always",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143817/