我正在尝试创作一个可以添加到 .net 4.0 或 4.5 项目中的 NuGet 包。包中包含的实际程序集都是针对 .net 3.5 构建的,除了针对 .net 4.0 构建的程序集之外 - 我无法控制这一点,因此我必须“按原样”使用程序集。
我正在处理的项目目标是 .net 4.5.2,并且需要引用这些“旧”程序集。我通过在我的 App.config 中添加以下内容启用了“旧版运行时激活”:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
这一切似乎都运作良好。现在,我希望将我的“旧”程序集打包到 NuGet 包中。我的 .nuspec 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<!-- many lines elided for clarity -->
<references>
<group>
<reference file="NetFx35Assembly1.dll" />
<reference file="NetFx35Assembly2.dll" />
</group>
<group targetFramework=".NETFramework4.5.2" >
<reference file="NetFx40Assembly.dll" />
</group>
</references>
</metadata>
<files>
<!-- .net 3.5 assemblies -->
<file src="NetFx35Assembly1.dll" target="lib\net35\NetFx35Assembly1.dll" />
<file src="NetFx35Assembly2.dll" target="lib\net35\NetFx35Assembly2.dll" />
<!-- .net 4.0 assemblies -->
<file src="NetFx40Assembly.dll" target="lib\net40\NetFx40Assembly.dll" />
</files>
</package>
我的期望是,当我将此包添加到我的 .net 4.5.2 项目中时,它会执行以下操作:
- 引用 3.5 程序集,因为它们位于未指定任何框架的“默认”组中
- 引用 4.0 程序集,因为它是在以 4.5.2 为目标的组中指定的
事情并没有像我预期的那样顺利。我实际上得到的是对 4.0 程序集的单一引用。
创作我想要的行为的正确方法是什么?如何使 NuGet 包确保<startup useLegacyV2RuntimeActivationPolicy="true">
标记存在于 App.config 文件中?