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

时间:2020-10-01 17:16:00

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

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

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

一切正常,但是目录.json中包含一些设置(PageSettings/

当我发布NuGet软件包并将其安装到新项目中时,该目录在VS中以linked item的形式出现(请参见图片)。因此,作为用户,我可以访问文件,但是在项目运行时它们“不存在”。

enter image description here

这意味着如果我运行该项目时没有实际复制和添加这些文件,我将得到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>

但这是行不通的,实际上似乎没有必要,因为Pack命令包含了我的文件,只是在安装时未正确创建它们。

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

1 个答案:

答案 0 :(得分:0)

实际上,您应该在nuget包中创建一个.props文件。

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

赞:

enter image description here

注意:如果您创建的名为test.1.0.0.nupkg的nuget程序包,则文件应命名为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