如何确定NuGet包中二进制文件的行为

时间:2018-06-20 10:55:44

标签: c# mef nuget-package

我正在研究这个大解决方案,在那里我将许多项目转换为NuGet软件包。这些软件包是通过.nuproj文件在VS中的单独解决方案中创建的。

一切正常,但以下各项除外: 在引导程序中,我为MEF加载了一些目录,以便能够导入它们,这在我处理原始项目时效果很好,但是现在所需的DLL(来自软件包)无法将其放入bin \ Debug \模块文件夹。

有没有办法让NuGet将其内容复制到Modules文件夹? (而不是根路径)

我尝试在包装内使用不同种类的子文件夹,但没有成功。

2 个答案:

答案 0 :(得分:1)

我发现针对此问题的最佳解决方案如下:

获取需要加载的文件,并将其放在内容文件夹中。这可以简单地完成:

<ItemGroup>
    <Content Include=" {here go the needed files} " />
</ItemGroup>

内容文件夹仅保存文件,但将其复制到客户端项目的输出文件夹中。为了将它们复制到所需的输出,可以使用.targets文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="CopyToOutput" AfterTargets="Build">
    <ItemGroup>
      <FilesToCopy Include="$(MSBuildThisFileDirectory)..\content\**\*.*"/>    
    </ItemGroup>
    <Copy 
      SourceFiles="@(FilesToCopy)" 
      DestinationFiles="@(FilesToCopy->'$(OutDir)/%(RecursiveDir)%(FileName)%(Extension)')"/>
  </Target>
</Project>

请记住,要将目标文件添加到项目中,目标文件名和NuGet的ID必须相等。

答案 1 :(得分:0)

您应该可以使用目标content/Modulescontent目录中的所有内容都将复制到构建版本的bin目录中。

如果您尝试使用特殊的“基于约定的”文件夹,例如lib/net45,则这些目录会导致Visual Studio在安装程序包时自动创建程序集引用。您不应该将它们用于常规内容文件。

有关更多详细信息,请参见operator bool