【问题标题】:Including a Folder in NuGet Package and have it install into project as file .netcore/Razor在 NuGet 包中包含一个文件夹并将其作为文件 .netcore/Razor 安装到项目中
【发布时间】:2020-10-01 17:16:00
【问题描述】:

我正在使用 Visual Studio 2019 并使用此方法成功创建 NuGet 包:

https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio?tabs=netcore-cli

一切顺利,但在PageSettings/ 目录中包含一些设置 (.json) 文件

当我发布我的 NuGet 包并将其安装到新项目中时,此目录在 VS 中显示为 linked item(见图)。因此,作为用户,我可以访问这些文件,但在项目运行时它们并不“存在”。

这意味着,如果我在没有物理复制和添加这些文件的情况下运行这个项目,我会得到ArgumentException: The directory name 'Path-To-project\pagesettings' does not exist. (Parameter 'Path')

我知道为什么会发生这种情况,但不知道如何改变它,或者是否可能。

上面链接的文章建议将代码添加到csproj 文件中,例如:

<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath>\</PackagePath>
  </Content>
</ItemGroup>

但这不起作用,实际上似乎没有必要,因为打包命令是包括我的文件,只是在安装时没有正确创建它们。

另外 - 如果有办法告诉 VS 提示是否安装此文件,那将非常方便。因为它是设置,如果用户更改设置然后安装我的 NuGet 包的更新版本,我不希望它覆盖他们的自定义设置......也许这就是链接设计发生的原因......如果是这样,如果有人可以确认吗?

【问题讨论】:

  • 您的csproj 文件看起来如何?您可能应该指定PackagePath 属性,以及使用IncludeInPackage="true"
  • 您也可以编写自己的 msbuild .props 或 .targets 文件以正确地将所需文件添加到安装包的项目中
  • 嗨,杰米,关于这个问题的任何更新?请检查我的回答是否对您处理问题有帮助,如果有帮助,请不要忘记接受它。如果没有,请随时告诉我们:)
  • 对不起 - 还没有机会尝试这个。我会尝试到今天下午!

标签: c# visual-studio nuget nuget-package


【解决方案1】:

其实,你应该在你的nuget包中创建一个.props文件。

1) 在您的 nuget 项目中创建一个名为 .props 的文件。

像这样:

注意:如果您创建的 nuget 包名为 test.1.0.0.nupkg,则该文件应命名为 test.props 以便它可以工作。

2) 将这些添加到test.props 文件中:

<Project>
  <Target Name="CopyFiles" BeforeTargets="Build">
    <ItemGroup>     
      <File Include="$(MSBuildThisFileDirectory)..\Pagesettings\*.*"></File>          
    </ItemGroup>
      <Copy SourceFiles="@(File)" DestinationFolder="$(ProjectDir)Pagesettings"></Copy>
  </Target>
</Project>

3) 将这些添加到xxx.csproj 文件中:

   <ItemGroup>
        <None Include="Pagesettings\*.*(the json files' path of your nuget project)" Pack="true" PackagePath="Pagesettings"> 
        </None>
        <None Include="build\*.*" Pack="true" PackagePath="build"></None>
    </ItemGroup>

然后重新打包您的项目。

4) 然后clean your nuget caches 或删除C:\Users\xxx(current user)\.nuget\packages 下的所有文件。

5)当您安装此新版本的 nuget 包时,请再次构建您的主项目以运行目标以生成文件。

除了,还有a similar issue about this。

【讨论】:

  • 这行得通!非常好,谢谢。现在唯一的麻烦是这些设置文件是用户可编辑的,如果用户下载我的 NuGet 包的更新,它将覆盖他们用户编辑的 .json 文件版本。知道如何让 VS 在 Build 上提示用户备份他们的设置和/或提供覆盖或忽略这些文件的选项吗?
猜你喜欢
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 2019-06-05
相关资源
最近更新 更多