我创建一个NuGet软件包并安装到另一个项目中。但请勿将文件复制到位置项目中。仅我的文件引用了NuGet包,并且我更改了代码,该包也更改了!我要将包复制到目标项目。
<?xml version="1.0"?>
<package>
<metadata minClientVersion="3.3.0">
<id>MyPackage</id>
<version>1.0.0</version>
<authors>Meysam</authors>
<owners>Meysam</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package description</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2018</copyright>
<tags>Tag1 Tag2</tags>
<contentFiles>
<files include="cs/*.*/**" buildAction="Compile" />
</contentFiles>
</metadata>
<files>
<file src="ConsoleApp1\CustomClass\CustomClass.cs" target="contentFiles\cs\any\CustomClass" />
</files>
</package>
答案 0 :(得分:1)
仅在使用packages.config
时才支持将文件复制到使用nuget程序包的项目中,而SDK样式的项目不支持,这是.NET Core项目所必需的。如您的屏幕快照所示,在构建时包括PackageReferences项目中的contentFiles
。您在屏幕快照中指向的C#右下角的小箭头图标和文件夹图标是视觉指示器,该文件和文件夹与项目中的其他文件和文件夹不同。实际上,该小图标覆盖类似于Windows为快捷方式添加的内容,因此,如果您了解快捷方式是一个“指向”另一个文件的文件,则应该理解这些是项目外文件的快捷方式,但包含在其中作为您项目的一部分。
无论如何,它按设计工作。
您将需要找到另一种方式来做您想做的事情,但是您没有描述为什么要在项目中包含引用您的软件包的文件,因此我无法提供直接建议。最好的建议是,如果您对ASP.NET和ASP.NET Core很有经验,请考虑一下ASP.NET过去如何直接从web.config中读取许多设置,但是ASP.NET Core而是使用生成器模式,因此用户不必被迫将设置存储在web.config中,并且可以将设置存储在所需的任何位置。如果您的操作相似,那么如果您为包用户提供了一个可以覆盖的配置生成器,而不是在项目中拥有一个文件,他们每次升级到该文件时都必须对其进行编辑和覆盖,则可以为他们带来更好的体验您的软件包的新版本。
答案 1 :(得分:1)
无法在.net核心中复制带有nuget包的文件夹
是的,就像齐夫坎所说:
仅将文件复制到使用nuget包的项目中 使用packages.config时受支持
但是,我们可以使用一种解决方法来解决此问题。我们可以在xx.targets文件中添加一个复制任务,然后在.nuspec
文件的\ build文件夹中设置此文件。
mypackage.targets
文件的内容:
<Target Name="CopyFile" AfterTargets="AfterBuild">
<ItemGroup>
<CopyFiles Include="$(NuGetPackageRoot)\mypackage\4.0.0\cs\*.*\**" />
</ItemGroup>
<Copy
SourceFiles="@(CopyFiles)"
DestinationFolder="$(ProjectDir)"
/>
</Target>
还有.nuspec
文件:
<file src="xxx\xxx\mypackage.targets" target="build" />
希望这会有所帮助。