我正在使用Visual Studio 2019并使用此方法成功创建NuGet包:
一切正常,但是目录.json
中包含一些设置(PageSettings/
)
当我发布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>
但这是行不通的,实际上似乎没有必要,因为Pack命令包含了我的文件,只是在安装时未正确创建它们。
此外-如果有一种方法可以告诉VS提示是否安装此文件,将非常方便。因为是设置,所以如果用户更改设置然后再安装我的NuGet软件包的更新版本,我不希望它覆盖其自定义设置...也许这就是链接设计发生的原因...如果是这样,如果有人可以确认吗?
答案 0 :(得分:0)
实际上,您应该在nuget包中创建一个.props
文件。
1)在您的nuget项目中创建一个名为
赞:
注意:如果您创建的名为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。