无法在.net Core中复制带有nuget包的文件夹

时间:2018-12-24 15:43:42

标签: visual-studio asp.net-core .net-core nuget

我创建一个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>

enter image description here

enter image description here

2 个答案:

答案 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" />

希望这会有所帮助。