以下将创建一个 nuget 包,当使用应用程序安装它时,它会将您选择的文件与包的 dll 一起持久保存,并且可以完全通过 Visual Studio 2017 IDE 完成。
假设您的解决方案中有一个名为 Foo.Bar 的 C# 项目,您希望将其构建到 nuget 包中:
在 Visual Studio 中,右键单击项目 Foo.Bar > Properties 并转到 Package 选项卡。确保Package id: 的值为Foo.Bar。
在与您的Foo.Bar.csproj 文件相同的目录中创建一个Foo.Bar.targets 文件,内容如下:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)\MyFile.txt">
<Link>MyFile.txt</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
在 Visual Studio 2017 中右键单击项目,然后选择 Edit Foo.Bar.csproj。将以下块放入打开的项目文件中:
<ItemGroup>
<None Include="MyFile.txt">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</None>
<None Include="Foo.Bar.targets">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</None>
</ItemGroup>
现在,当您右键单击项目并选择Pack(或者如果您从项目所在目录的命令行中运行dotnet pack),它将为您的Foo.Bar 项目生成一个.nupkg 文件. MyFile.txt 和 Foo.Bar.targets 将位于其中的 build 文件夹中。
作为测试,我将它安装到一个示例控制台应用程序项目中。这样做之后,MyFile.txt 会出现在控制台应用程序的解决方案资源管理器中,并且可以打开和编辑。此外,如果我发布控制台应用程序,Foo.Bar.dll 和 MyFile.txt 都在已发布文件的 bin > Release > [TargetFramework] > publish 文件夹中(如果使用文件夹配置文件发布到本地磁盘)。
需要注意的一个有趣的事情是,在撰写本文时,如果您在安装软件包的控制台应用程序中右键单击 MyFile.txt 并选择 Properties,您会看到 Copy to Output Directory 设置为 Always .如果我尝试将其更改为Do Not Copy 或其他任何内容,尽管单击OK,但在关闭对话框时它将恢复为Always。就像您每次单击Cancel 一样。这是因为对生成 nuget 包的原始 Foo.Bar.csproj 文件进行了编辑,特别是:<CopyToOutputDirectory>Always</CopyToOutputDirectory>。