C# 在NuGet包中包含一个文件夹,并将其作为文件.netcore/Razor安装到项目中

C# 在NuGet包中包含一个文件夹,并将其作为文件.netcore/Razor安装到项目中,c#,visual-studio,nuget,nuget-package,C#,Visual Studio,Nuget,Nuget Package,我正在使用Visual Studio 2019并使用此方法成功创建NuGet软件包: 一切进展顺利,但目录PageSettings/中包含一些设置(.json)文件 当我发布我的NuGet软件包并将其安装到一个新项目中时,该目录在VS中显示为一个链接项(参见图)。因此,作为用户,我可以访问这些文件,但在项目运行时它们并不“存在” 这意味着,如果我运行此项目而没有实际复制和添加这些文件,我将获得ArgumentException:目录名“Path To project\pagesettings

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

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

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

这意味着,如果我运行此项目而没有实际复制和添加这些文件,我将获得
ArgumentException:目录名“Path To project\pagesettings”不存在。(参数“路径”)

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

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

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

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


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

实际上,您应该在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>
   <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)然后删除
C:\Users\xxx(当前用户)\.nuget\packages
下的所有文件

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


除了,还有。

您的
csproj
文件是什么样子的?您可能应该指定
PackagePath
属性,并使用
IncludeInPackage=“true”
您还可以编写自己的msbuild
.props
.targets
文件,以便将所需文件正确添加到安装包的项目中Hi,Jamie,有关于此问题的更新吗?请检查我的回答是否有助于您处理问题,如果有帮助,请不要忘记接受。如果没有,请随时告诉我们:)对不起-我还没有机会尝试这个。今天下午我会尽量去的!这管用!太好了,谢谢。现在唯一的问题是,这些设置文件是用户可编辑的,如果用户下载到my NuGet软件包的更新,它将覆盖用户编辑的
.json
文件版本。知道如何让VS在构建时提示用户备份其设置和/或提供覆盖或忽略这些文件的选项吗?