如何通过 NuGet 包共享源代码以用于 .NET Core 项目

How to share source code via NuGet packages for use in .NET Core projects(如何通过 NuGet 包共享源代码以用于 .NET Core 项目)
本文介绍了如何通过 NuGet 包共享源代码以用于 .NET Core 项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想让小段源代码(例如帮助程序类)可用于 .NET Core 项目 (.csproj).至此,我根据不同的博文和官方的 nuget 文档,以多种不同的方式用 NuGet 打包了源代码.我使用了一个 nuspec 文件来控制我的源文件在 nuget 包中的最终位置,例如:

<文件><file src="*.cs" target="content/LruCache"/><file src="*.cs" target="contentFiles/cs/any/LruCache"/></文件>

我没有包含任何 msbuild 目标文件或安装脚本.

每当我将 NuGet 包安装到 .NET Core 项目中时 (

注意: 创建新包时,不要忘记在 C:Users.nugetpackages<中删除此包的 nuget 缓存/code> 文件夹,否则,它总是安装旧包.

使用此方法,源文件将包含到您的项目中.

希望这会有所帮助.

I want to make small pieces of source code (e.g. helper classes) available for use in .NET Core projects (.csproj). At this point I packaged the source code with NuGet in many different ways according to different blog posts and the official nuget docs. I used a nuspec file to control where my source files will end up in the nuget package, e.g.:

<files>
    <file src="*.cs" target="content/LruCache" />
    <file src="*.cs" target="contentFiles/cs/any/LruCache" />
</files>

I did not include any msbuild targets file or install script.

Whenever I install the NuGet package into a .NET Core project (https://docs.microsoft.com/en-us/dotnet/core/tools/csproj) I simply don't get anything there. No source files will be included into my project. I tried different settings for the <PackageReference/> node in the .csproj (PrivateAssets, etc.) without success.

Is it meant to be possible at all? If so, how should it be done?


Background:
The reason for doing this is some kind of diamond problem where we have projects B and C both using helper class A and a third project D using B and C. In this situation I don't want to deal with assembly version conflicts when different (incompatible) versions of A have been used in B and C.

解决方案

Is it meant to be possible at all? If so, how should it be done?

The answer is yes. Since you test project type is .net core. You should use contentFiles instead of content. content is used for packages.config. Check the Using the contentFiles element for content files and blog NuGet ContentFiles Demystified for more details.

So your .nuspec file should be:

<?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>

The nuget package should be looks like:

Note: When you create a new package, do not forgot to remove the nuget cache for this package in the C:Users<UserName>.nugetpackages folder, otherwise, it always install the old package.

With this method, the source files will be included into your project.

Hope this helps.

这篇关于如何通过 NuGet 包共享源代码以用于 .NET Core 项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)