我正在尝试创建一个可以添加到.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项目时,它会执行以下操作:
事情并没有像我预期的那样成功。我实际得到的是对4.0程序集的单一引用。
创作我想要的行为的正确方法是什么?如何使NuGet包确保App.config文件中存在<startup useLegacyV2RuntimeActivationPolicy="true">
标记?
答案 0 :(得分:1)
对于参考组,NuGet将仅为一个组安装所有项目。如果存在更具体的匹配,则不会在未指定任何框架的情况下安装组。如果项目的目标框架没有其他匹配项,则使用此默认组。
除非.NET 4.0程序集仅针对.NET 4.5.2,否则我可能不会在NuGet包中明确地定位.NET 4.5.2。如果它们与.NET 4.0兼容,我会让它们以.NET 4.0为目标
<group targetFramework="net35">
<reference file="NetFx35Assembly1.dll" />
<reference file="NetFx35Assembly2.dll" />
</group>
<group targetFramework="net40" >
<reference file="NetFx35Assembly1.dll" />
<reference file="NetFx35Assembly2.dll" />
<reference file="NetFx40Assembly.dll" />
</group>
请注意,上述内容相当于没有在元数据部分中定义的引用,只使用:
<files>
<!-- .net 3.5 assemblies -->
<file src="NetFx35Assembly1.dll" target="lib\net35" />
<file src="NetFx35Assembly2.dll" target="lib\net35" />
<!-- .net 4.0 assemblies -->
<file src="NetFx35Assembly1.dll" target="lib\net40" />
<file src="NetFx35Assembly2.dll" target="lib\net40" />
<file src="NetFx40Assembly.dll" target="lib\net40" />
</files>
对于app.config文件,我将使用XML document transform来添加启动元素。