【问题标题】:.NET: How to determine programmatically whether a .NET application has been compiled?.NET:如何以编程方式确定 .NET 应用程序是否已编译?
【发布时间】:2014-01-15 17:03:11
【问题描述】:

我需要安装一些脚本/应用程序,每次启动时都会运行并在用户权限下执行一些操作。

我的脚本会检查某个 .NET 应用程序的当前版本(如果未编译则运行非常慢,如果已编译则运行非常快)是否已编译。如果是否定的,它将编译它(使用NGEN.EXE)。我们知道 .NET 应用程序必须逐台编译。

每次机器启动时都必须执行此检查。

问题:您是否建议使用 C#、C++ 或一些脚本来实现它?能否提供详细信息?

TIA。

【问题讨论】:

  • 我认为,当您在应用程序中引用服务时,您正在谈论预编译。在 .Net 项目属性上,您有一个复选框,您可以在构建 Dll 时选中该复选框以预编译所有内容。它将生成另一个 *.XmlSerializers.dll,然后您可以将其与您的其他 Dll 一起分发
  • 我在Properties下找到的最接近的(MSVS-2010)是一个复选标记Build | Optimize Code
  • 老实说,我不知道 c++ 项目,但在 VS 2012 中的 c# 项目属性中,这是在构建屏幕上 - 下拉“生成序列化程序集”。选项 - 自动、开、关。
  • DLL 由 Microsoft 构建。它是OpenXML SDK。我的应用使用它。

标签: c++ .net windows system-administration


【解决方案1】:

试图找出没有任何意义,ngen.exe 已经可以自己做到这一点。运行:

ngen.exe 更新/队列

更新命令告诉它寻找不再有效的本机图像。 /queue 选项告诉它在后台执行作业。

针对特定程序集完成

ngen.exe 程序集路径 install /queue

【讨论】:

  • 这个解决方案好得令人难以置信。我们说话的时候正在尝试。这需要 很多 时间,而且我只对一个应用程序感兴趣。
  • 只有未正确卸载程序集时才正常。你经常和 GAC 打交道吗?也许是时候清理一下了。第二次运行它肯定会更好看。
  • “你经常和 GAC 打交道吗?”第一次。我是一个完全的 .NET 新手。
  • 第一个。运行,花了将近30分钟。我再次运行它。
  • 不知道哪里出了问题,你最好坚持安装。
【解决方案2】:

自尊:

您需要做的就是确定MyApp.exe 的日期并将其与日期进行比较

C:\Windows\assembly\NativeImages*\*\MyApp.ni.exe

如果后者较旧,则需要重新编译。

不客气。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多