【问题标题】:Running .NET 3.5 applications on Windows 10 without installing anything or shipping app.config在 Windows 10 上运行 .NET 3.5 应用程序,无需安装任何东西或发送 app.config
【发布时间】:2020-08-18 14:28:27
【问题描述】:

我有一个具有以下要求的 WPF 应用程序:

  1. 必须在 Windows 7 到 Windows 10 中工作,而无需在系统中安装任何其他东西
    • 即必须在 .NET 3.5 和 .NET 4 框架系统上工作
  2. 它必须是单个可执行文件,不存在其他配置文件或 DLL

我主要是通过构建我的应用程序同时面向 .NET 3.5 和 Costura.Fody 来完成这项工作。然后,我可以通过在 App.Config 中使用以下内容使其在未安装 .NET 3.5 的机器上运行:

   <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0"/>
   </startup>

问题是,这仅在 app.exe.config 位于违反要求 #3 的 exe 旁边时才有效。

对此我有什么选择?我考虑过可能创建一个嵌入了 EXE 和 Config 的 C++ 应用程序,并在启动时将 2 个文件复制到临时文件夹(如果还没有的话)并从那里执行它,但我不确定是否有更好的方法。

【问题讨论】:

  • 创建一个额外的 C++ 应用程序而不是简单地部署一个额外的配置文件?你是认真的吗?
  • 这是给我的要求
  • 好吧,那么我猜你必须将 .exe 和 .config 文件嵌入到一些 .exe 中,然后在启动时解压它们。运行应用的 .NET Framework 版本由 this 顺序确定,其中包括 App.config
  • 谢谢 - 所以我的假设是正确的。如果不创建另一个 EXE,例如在 .NET 框架之外的所有窗口上运行的 c++,没有其他方法可以完成所需的工作
  • 您是否考虑过迁移到 .NET Core 并发送 single-file executable

标签: c# .net wpf visual-studio


【解决方案1】:

docs 中所述,针对 .NET Framework 3.5 编译的 .NET Framework 应用程序需要该配置文件才能在 .NET Framework 4 上运行。

您最好的选择可能是迁移到 .NET Core 并将您的应用部署为 single-file executable

【讨论】:

    【解决方案2】:

    我找到了一个解决方案 - 我能够使用 IExpress 创建一个自解压应用程序,它将 2 个文件(exe 和 config)存储到 temp 文件夹中,然后启动 exe。这似乎适用于我测试过的所有 Windows 平台,并解决了我的所有要求。

    【讨论】:

    • 所以你更喜欢“IExpress”而不是 .NET Core?这正是 .NET Core 为您所做的……
    • 我的应用程序在构建时大小为 2MB。使用 IExpress 实际上将其减少到 1.7MB。我尝试使用 .NET Core,虽然它确实解决了我的要求,但它是 60MB
    • 很公平,但也许您应该在答案中包含这一点?还请记住接受答案以关闭问题和vote up all helpful answers
    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2012-09-06
    • 2016-10-29
    相关资源
    最近更新 更多