如何确定 NuGet 包中二进制文件的行为
How to determine behavior of binaries in NuGet package
我正在研究这个大的解决方案,我将很多项目变成了 NuGet 包。这些包是通过 VS 中单独解决方案中的 .nuproj 文件创建的。
一切正常,但以下情况除外:
在 bootstrap,我为 MEF 加载了一些目录以便能够导入它们,这在我处理原始项目时工作得很好,但现在所需的 DLL(来自 a 包)没有进入bin\Debug\Modules 个文件夹。
有没有办法让 NuGet 将其内容复制到 Modules 文件夹中? (而不是根路径)
我尝试使用包内的不同种类的子文件夹,但没有成功。
您应该可以使用 content/Modules
的目标。 content
目录中的任何内容都会在构建时复制到 bin
目录中。
如果您尝试使用特殊的 "convention based" 文件夹,例如 lib/net45
,这些目录会导致 Visual Studio 在安装包时自动创建程序集引用。您不应该将它们用于常规内容文件。
有关详细信息,请参阅 documentation。
我发现这个问题的最佳解决方案如下:
把需要加载的文件放到content文件夹下。这可以简单地完成:
<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 必须相同才能将目标文件添加到项目中。
我正在研究这个大的解决方案,我将很多项目变成了 NuGet 包。这些包是通过 VS 中单独解决方案中的 .nuproj 文件创建的。
一切正常,但以下情况除外: 在 bootstrap,我为 MEF 加载了一些目录以便能够导入它们,这在我处理原始项目时工作得很好,但现在所需的 DLL(来自 a 包)没有进入bin\Debug\Modules 个文件夹。
有没有办法让 NuGet 将其内容复制到 Modules 文件夹中? (而不是根路径)
我尝试使用包内的不同种类的子文件夹,但没有成功。
您应该可以使用 content/Modules
的目标。 content
目录中的任何内容都会在构建时复制到 bin
目录中。
如果您尝试使用特殊的 "convention based" 文件夹,例如 lib/net45
,这些目录会导致 Visual Studio 在安装包时自动创建程序集引用。您不应该将它们用于常规内容文件。
有关详细信息,请参阅 documentation。
我发现这个问题的最佳解决方案如下:
把需要加载的文件放到content文件夹下。这可以简单地完成:
<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 必须相同才能将目标文件添加到项目中。