什么';编写必须添加对旧框架程序集的引用的NuGet包的正确方法是什么?

什么';编写必须添加对旧框架程序集的引用的NuGet包的正确方法是什么?,nuget,nuspec,Nuget,Nuspec,我正在尝试编写一个可以添加到.NET4.0或4.5项目中的NuGet包。包中包含的实际程序集都是根据.net 3.5构建的,除了一个是根据.net 4.0构建的程序集之外,其他所有程序集都是根据.net 3.5构建的-我对此没有控制权,因此我必须使用“原样”的程序集 我正在处理的项目以.net 4.5.2为目标,需要引用这些“遗留”程序集。我已通过在我的App.config中包含以下内容启用了“旧版运行时激活”: <startup useLegacyV2RuntimeActivatio

我正在尝试编写一个可以添加到.NET4.0或4.5项目中的NuGet包。包中包含的实际程序集都是根据.net 3.5构建的,除了一个是根据.net 4.0构建的程序集之外,其他所有程序集都是根据.net 3.5构建的-我对此没有控制权,因此我必须使用“原样”的程序集

我正在处理的项目以.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软件包确保App.config文件中存在
    标记?

    对于引用组,NuGet将仅为一个组安装所有项目。如果存在更具体的匹配项,则在未指定任何框架的情况下不会安装组。如果项目的目标框架没有其他匹配项,则使用此默认组

    此外,我可能不会在NuGet包中明确地以.NET 4.5.2为目标,除非.NET 4.0程序集仅以.NET 4.5.2为目标。如果它们与.NET4.0兼容,我会让它们以.NET4.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文件,我将使用添加启动元素