我正在尝试创建内容文件(没有托管程序集)的.NET标准nuget包,以供.NET Framework程序集使用。我的目的是使该文件文件夹输出到使用程序集的bin文件夹中。
这个问题类似于Add native files from NuGet package to project output directory(并使用此nuget软件包http://www.nuget.org/packages/Baseclass.Contrib.Nuget.Output/),但我要求我的nuget软件包为.NET Standard
我已将文件添加到程序集中的contentfiles \ any \ any \ myfiles下,并将以下内容添加到nuspec文件的元数据部分:
SELECT FROM (
TRAVERSE out('Child') FROM #21:0
)
当我尝试将其添加到.NET Framework程序集时,出现错误
<contentFiles>
<files include="any/any/myfiles/*" buildAction="None" copyToOutput="true" />
</contentFiles>
我还尝试将文件添加到项目的根目录,并在nuspec文件的元数据元素下面添加以下内容:
Could not install package 'myPackage 1.0.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6.2', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
完整的nuspec文件:
<files>
<file src="myfiles\**\*" target="myfiles" />
此外,在csproj中,我还将TargetFramework元素更改为
<?xml version="1.0"?>
<package>
<metadata>
<id>myPackage</id>
<version>1.0.0</version>
<title>myPackage</title>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>my files/description>
<releaseNotes></releaseNotes>
<tags></tags>
<contentFiles>
<files include="any/any/myfiles/*" buildAction="None" copyToOutput="true" />
</contentFiles>
</metadata>
<files>
<file src="myfiles\**\*" target="myfiles" />
</files>
</package>
解决方案:
最后这就是解决方案。 “ myFiles”是一个位于项目根目录中的文件夹,其中包含许多不同的文件和子目录。
nuspec文件:
<TargetFrameworks>netstandard1.3;netstandard2.0;net40;net45;net46</TargetFrameworks>
引用nuget包的项目将似乎有一个名为“ myfiles”的文件夹(所有文件上带有链接图标),该文件夹将在构建时复制到bin文件夹中。
答案 0 :(得分:1)
有一些推断的方法可以执行此操作,但是add可以在此处将targetFramework添加为依赖项设置。
<dependencies>
<group targetFramework=".NETStandard1.3" />
<group targetFramework=".NETStandard2.0" />
<group targetFramework=".NETFramework4.0" />
<group targetFramework=".NETFramework4.5" />
<group targetFramework=".NETFramework4.6" />
<group targetFramework=".NETFramework4.6.2" />
</dependencies>
我还建议您在nuspec文件的files部分中将.dll文件与您的内容文件明确分开,并引用lib\<targetName>\
约定。(实际上与我上面提到的推断观点有关,但目前我没有太多细节可提供)
因此您的nuspec文件将如下所示:
<?xml version="1.0"?>
<package>
<metadata>
<id>myPackage</id>
<version>1.0.0</version>
<title>myPackage</title>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>my files/description>
<releaseNotes></releaseNotes>
<tags></tags>
<contentFiles>
<files include="any/netstandard1.3/myfiles/*" buildAction="None" copyToOutput="true" />
<files include="any/netstandard2.0/myfiles/*" buildAction="None" copyToOutput="true" />
<files include="any/net40/myfiles/*" buildAction="None" copyToOutput="true" />
<files include="any/net45/myfiles/*" buildAction="None" copyToOutput="true" />
<files include="any/net46/myfiles/*" buildAction="None" copyToOutput="true" />
<files include="any/net462/myfiles/*" buildAction="None" copyToOutput="true" />
</contentFiles>
<dependencies>
<group targetFramework=".NETStandard1.3" />
<group targetFramework=".NETStandard2.0" />
<group targetFramework=".NETFramework4.0" />
<group targetFramework=".NETFramework4.5" />
<group targetFramework=".NETFramework4.6" />
<group targetFramework=".NETFramework4.6.2" />
</dependencies>
</metadata>
<files>
<file src="<your-path>\<yourprojectassembly.dll>" target="lib\netstandard1.3\<yourprojectassembly.dll>" />
<file src="<your-path>\<yourprojectassembly.dll>" target="lib\netstandard2.0\<yourprojectassembly.dll>" />
<file src="<your-path>\<yourprojectassembly.dll>" target="lib\net40\<yourprojectassembly.dll>" />
<file src="<your-path>\<yourprojectassembly.dll>" target="lib\net45\<yourprojectassembly.dll>" />
<file src="<your-path>\<yourprojectassembly.dll>" target="lib\net46\<yourprojectassembly.dll>" />
<file src="<your-path>\<yourprojectassembly.dll>" target="lib\net462\<yourprojectassembly.dll>" />
<file src="<your-path>\myfiles\*" target="content\myfiles" />
<file src="<your-path>\myfiles\*" target="contentFiles\any\netstandard1.3\myfiles" />
<file src="<your-path>\myfiles\*" target="contentFiles\any\netstandard2.0\myfiles" />
<file src="<your-path>\myfiles\*" target="contentFiles\any\net40\myfiles" />
<file src="<your-path>\myfiles\*" target="contentFiles\any\net45\myfiles" />
<file src="<your-path>\myfiles\*" target="contentFiles\any\net46\myfiles" />
<file src="<your-path>\myfiles\*" target="contentFiles\any\net462\myfiles" />
</files>
</package>
截取您的nuget包的项目的外观截图。 (我的内容是文本文件,目标是"lib\<target>\any"
)
值得注意的是,虽然程序集中引用了您的程序包的内容可能有一些行为方面的考虑。
在上图中,来自nuget包的内容默认情况下称为“无复制到输出”,而C#编译称为BuildAction。