gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:33:05 25 4
gpt4 key购买 nike

我在构建后事件中使用此命令从项目生成 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

如果您需要针对不同架构的不同内容,则可以在 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/

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