我想提供一小部分源代码(例如帮助器类)以供.NET Core项目(.csproj)使用。 此时,根据不同的博客文章和官方的nuget文档,我以许多不同的方式将源代码与NuGet打包在一起。我使用nuspec文件来控制源文件在nuget包中的最终位置,例如:
xcode-select --install
sudo xcode-select --switch /Applications/Xcode.app
我没有包含任何msbuild目标文件或安装脚本。
每当我将NuGet软件包安装到.NET Core项目(https://docs.microsoft.com/en-us/dotnet/core/tools/csproj)中时,我什么都没有。没有源文件将包含在我的项目中。我尝试为.csproj(PrivateAssets等)中的<files>
<file src="*.cs" target="content/LruCache" />
<file src="*.cs" target="contentFiles/cs/any/LruCache" />
</files>
节点尝试了不同的设置。
这是否意味着有可能?如果是这样,应该怎么做?
背景:
这样做的原因是某种钻石问题,其中我们有使用助手类A的项目B和C,而使用B和C的第三个项目D。
在这种情况下,当在B和C中使用不同(不兼容)的A版本时,我不想处理程序集版本冲突。
答案 0 :(得分:5)
这是否意味着有可能?如果是这样,应该怎么做?
答案是肯定的。由于您测试的项目类型是.net核心。您应该使用contentFiles
而不是content
。 content
用于packages.config。查看Using the contentFiles element for content files和博客NuGet ContentFiles Demystified,了解更多详细信息。
因此您的.nuspec
文件应为:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyTestCore</id>
<version>5.0.0</version>
<authors>TestContentFile</authors>
<owners>TestContentFile</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package Description</description>
<contentFiles>
<files include="any/any/Test.cs" buildAction="content" flatten="true" copyToOutput="true"/>
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/Test.cs" target="contentFiles/any/any/LruCache" />
</files>
</package>
nuget包应如下所示:
注意:创建新程序包时,请不要忘记在C:\Users\<UserName>\.nuget\packages
文件夹中删除该程序包的nuget缓存,否则,它将始终安装旧程序包。
使用这种方法,源文件将包含在您的项目中。
希望这会有所帮助。