我们有一个支持.NET 2.0和.NET 4.0的应用程序,我们使用<bindingRedirect />
切换一些与框架相关的程序集。我们使用<supportedRuntime />
元素允许应用程序使用最新的框架(如果可用)运行。但是,我们仍然需要完整配置文件,而不仅仅是客户端配置文件。
documentation for .NET 3.5表示您必须通过向sku="client"
元素添加<supportedRuntime />
属性明确选择加入仅限客户端支持。
sku属性名称区分大小写。如果sku属性是 丢失,或者如果将其值设置为“client”以外的任何值,则 运行时假定应用程序不是.NET Framework客户端配置文件 应用
但是,使用.NET 4.0时,缺少有关sku属性的详细文档。在我们的测试中,即使缺少sku属性,.NET运行时也将使用.NET 4.0客户端配置文件。这是一个问题,因为它不允许使用.config文件进行动态重定向。我试图使用sku="full"
尝试强制它只使用完整的配置文件,但这只会导致不支持.NET 4.0运行时。
有没有人知道在使用<supportedRuntime />
(或其他类似解决方案)来支持多个.NET框架版本时强制使用完整.NET配置文件的方法?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0.30319" />
<supportedRuntime version="v2.0.50727" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"
appliesTo="v4.0.30319">
<dependentAssembly>
<assemblyIdentity name="Application"
publicKeyToken="798276055709c98a"
/>
<bindingRedirect oldVersion="4.1.2000.0"
newVersion="4.1.4000.0" />
<codeBase version="4.1.4000.0"
href="Redistributable\.NET 4.0\Application.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 0 :(得分:4)
我的理解是这会起作用:
<supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0.1" />
<supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0" />
没有Profile = Full,但是根据我的理解,配置文件意味着限制为较小的SKU。
可以在
找到已安装的SKU列表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs
答案 1 :(得分:0)
根据更新的.NET 4.5&amp; 4.6 <supportedRuntime> Element的MSDN页面,sku
属性有一个“配置文件”选项,虽然它的唯一值是“客户端”,但它似乎并不意味着“完全” - 仅(根据该页面上的sku
图表)。所以你应该对以下内容表示满意:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
<supportedRuntime version="v2.0.50727" />
</startup>
请注意,根据该链接的MSDN页面:
从.NET Framework 4开始,只需要主要版本号和次要版本号(即“v4.0”而不是“v4.0.30319”)。建议使用较短的字符串。