gpt4 book ai didi

visual-studio - 在 nuget 包中将内容文件设置为 "copy local : always"

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:26 24 4
gpt4 key购买 nike

我在构建后事件中使用此命令从项目生成 nuget 包。变量 %conf% 设置为正确的配置(调试或发布)并且 %1 是项目名称(例如“MyCompany.MyProject”)。

nuget pack -Prop Configuration=%conf% "%1.csproj" -exclude *.sql -IncludeReferencedProjects

此包仅供我们自己使用,永远不会在 nuget 上发布。它在我们的私有(private)存储库中结束。

在项目中,有一个文件设置为generate action : contentcopy local : always。 (我的 Visual Studio 是法语的,所以我不能 100% 确定翻译)。我们将其命名为 importantfile.xml

在生成的包中,我最终得到了这个结构:

- content
- importantfile.xml
- lib
-net45 (.NetFramework,Version=v4.5)
-MyCompany.MyProject.dll

没关系,我希望将 importantfile.xml 部署到包中,因为这个文件很重要!

当我在另一个项目中安装包时,importantfile.xml 部署在项目的根目录下。没关系。但它没有设置为 copy local : always

我需要 importantfile.xml copy local : always 在我安装包的项目中。

我怎样才能做到这一点?

注释:

可以在安装包后立即在文件上设置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 目录。

  • build
    • 重要文件.xml
    • MyPackage.targets
    • net45
      • MyAssembly.dll

如果您需要不同架构的不同内容,那么您可以在 Build 下添加架构文件夹,每个文件夹都有自己的目标文件。

通过 NuGet Content 目录在 PowerShell 脚本上使用目标文件的好处:

  • 所需的内容文件未显示在 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/46451780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com