我有一个包含非常详细的配置部分的库。我创建了一个 XSD,并希望将它与我的包一起分发,以便当用户安装包时,Visual Studio 知道 XSD,而用户无需做任何额外的事情。我该怎么做呢?
2 回答
您可以通过将它们放在内容目录中来将所需的任何文件包含在 nuget 包中。然后在安装包时将它们安装到目标项目的根目录中。如果您使用 nuspec 文件来构建您的包,您将在该元素下添加以下元素。
<files>
<file src="Configuration\MyXsd.xsd" target="content\TargetFolderName" />
</files>
这将在目标项目中创建以下文件
\TargetFolderName\MyXsd.xsd
一旦 xsd 在目标项目中,visual studio 应该会自动将其拾取以验证您的配置部分。
最近,SDK 样式项目和引用 nuget 包的不同方式变得更加复杂。
请注意本节的结尾。
基本上,如果 package.config 文件引用了 nuget 项目,则 nuget 包的 content 文件夹中的文件将被复制到引用项目中。如果项目文件中的 PackageReference 引用了 nuget 包,则将使用包内 contentFiles 文件夹中的文件。建议两者都包含。
现在,如果您使用 .nuspec 文件来配置您的 nuget 包,您可以使用SynXsiS 答案将文件包含到两个目录中:
<files>
<file src="Configuration\MyXsd.xsd" target="content\TargetFolderName" />
<file src="Configuration\MyXsd.xsd" target="contentFiles\any\any\TargetFolderName" />
</files>
但是,如果要在 SDK 项目的 .csproj 文件中进行配置,则必须将要包含在 nuget 包中的文件添加到具有以下属性的项目文件中:
<ItemGroup>
<None Include="MyXsd.xsd">
<Pack>true</Pack>
<PackagePath>contentFiles\any\any\TargetFolderName;content\TargetFolderName</PackagePath>
</None>
</ItemGroup>
contentFiles 路径的 any\any\ 部分指定文件所指的语言(cs、vb、...)和目标框架。
请注意,该项目不一定必须是“无”类型,也可以是“内容”和此处描述的其他类型。