msbuild如何从多框架nuget包解析程序集?

msbuild如何从多框架nuget包解析程序集?,msbuild,nuget,nuget-package,Msbuild,Nuget,Nuget Package,我有一个控制台应用程序ConsoleApp-net461的解决方案,它引用库ClassLibrary-net452 两个项目都引用了一个多框架nuget包NuGetPackage-net452-net461 当我构建时,我在输出文件夹中得到了nuget包的net461 dll。在运行时,我会遇到如下错误: System.TypeLoadException: Inheritance security rules violated by type: 'ClassA'. Derived types

我有一个控制台应用程序
ConsoleApp-net461
的解决方案,它引用库
ClassLibrary-net452

两个项目都引用了一个多框架nuget包
NuGetPackage-net452-net461

当我构建时,我在输出文件夹中得到了nuget包的net461 dll。在运行时,我会遇到如下错误:

System.TypeLoadException: Inheritance security rules violated by type: 'ClassA'. 
Derived types must either match the security accessibility of the base type or be less accessible.
我怀疑这是因为我的
ClassLibrary-net452
最终依赖于带有net461框架的nuget包dll


这是正常的行为吗?确保从nuget包解析net452 dll的最佳方法是什么?BindingRedirects似乎不允许您选择目标框架。

不能100%确定这是否可行,但可能值得尝试:

(依赖于使用SDK csproj格式,link可能适用于packages.config,但我对该领域知之甚少。)

看起来你想要的是什么。然而,dotnet/SDK团队还没有来得及实现它

建议的解决方法是:
-从包引用中获取dll路径
-告诉包引用不要复制编译资产(DLL)。
-使用dll路径为重定向到包的Net452版本的非包引用生成类似路径

解释性链接和

总结是您的csproj应该包含如下内容:

<ItemGroup>
    <PackageReference Include="*MyPackageName*" ExcludeAssets="Compile" GeneratePathProperty="true">
        <Version>x.y.z</Version>
    </PackageReference>
</ItemGroup>

<ItemGroup>
    <Reference Include="*NameYouWantToGiveThisReference(suggest dll name)*">
  <HintPath>$(Pkg*MyPackageName*)lib\net452\*DLLname*.dll</HintPath>
</Reference>

整数解
$(Pkg*MyPackageName*)lib\net452\*DLLname*.dll

由**包围的所有内容都需要根据项目的实际名称命名。
两个MyPackageName必须匹配(注意,第一个中的所有“.”都应替换为第二个中的“u”)