如何通过nuget包共享源代码以在.NET Core项目中使用

时间:2018-10-18 18:50:41

标签: c# visual-studio .net-core nuget csproj

我想提供一小部分源代码(例如帮助器类)以供.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版本时,我不想处理程序集版本冲突。

1 个答案:

答案 0 :(得分:5)

  

这是否意味着有可能?如果是这样,应该怎么做?

答案是肯定的。由于您测试的项目类型是.net核心。您应该使用contentFiles而不是contentcontent用于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包应如下所示:

enter image description here

注意:创建新程序包时,请不要忘记在C:\Users\<UserName>\.nuget\packages文件夹中删除该程序包的nuget缓存,否则,它将始终安装旧程序包。

enter image description here

使用这种方法,源文件将包含在您的项目中。

希望这会有所帮助。