17

我有一个 WinForms 应用程序,它应该很容易使用 .exe 文件进行部署。它使用框架 2.0,因此默认情况下它不适用于 Windows 8。如果我包含具有以下参数的 .config 文件,它在 W8 上可以正常工作:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

但是,现在我必须部署两个文件,这是不可接受的。我可以做些什么来将这些参数“嵌入”到 exe 本身中吗?

我曾尝试使用 WinZip 自解压器,但它也不是一个选项,因为我无法自定义它的界面。

4

1 回答 1

13

.NET 可执行文件包含一小段本机代码,旨在将适当的 CLR 版本加载到进程中。

加载程序调用shim(MSCOREE.DLL,.NET 可执行文件具有来自此 DLL 的本机依赖项)来加载 CLR( v4 中的CLRCreateInstance)。配置元素的
内容由 shim 处理。<startup>

这意味着,您不能<startup>在托管代码中处理元素,因为此时没有 CLR(和任何托管代码)。唯一的方法是编写自己的 CLR 主机。我认为,使用配置文件发布应用程序或构建 .NET 4/4.5 版本要容易得多。

于 2012-09-07T11:14:49.153 回答