c# - .NET 可执行文件在被新版本覆盖后不起作用

标签 c# .net side-by-side

我遇到了非常奇怪的行为 - 在我用网络驱动器的新版本覆盖 .NET 可执行文件后,它无法启动。 当尝试从 Windows 资源管理器启动时,它显示以下错误:

[Window Title]
C:\Programs\zzz\clients.net\zzzNet.exe
[Content]
C:\Programs\zzz\clients.net\zzzNet.exe
The application has failed to start because its side-by-side configuration is   incorrect. Please see the application event log or use the command-line   sxstrace.exe tool for more detail.

我尝试执行以下命令:

SxsTrace Trace -logfile:SxsTrace.etl 
SxStrace Parse -logfile:SxSTrace.etl -outfile:SxSTrace.txt 

得到如下结果:

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = AMD64
    CultureFallBacks = en-US;en;ru-RU;ru
    ManifestPath = C:\Programs\zzz\clients.net\zzzNet.exe
    AssemblyDirectory = C:\Programs\zzz\clients.net\
    Application Config File = C:\Programs\zzz\clients.net\zzzNet.exe.Config
-----------------
INFO: Parsing Application Config File     C:\Programs\zzz\clients.net\zzzNet.exe.Config.
INFO: Parsing Manifest File C:\Programs\zzz\clients.net\zzzNet.exe.
    INFO: Manifest Definition Identity is (null).
    ERROR: Line 0: XML Syntax error.
ERROR: Activation Context generation failed.
End Activation Context Generation.

这是非常简单的 .NET 应用程序(1 个 exe + 8 个 dll 文件)。它是为 .NET 3.5 客户端配置文件构建的。

我没有在那里定义任何特殊的“ list ”。在Visual Studio中点击“New Windows Forms Project”就可以开发了。 此外,app.config 不包含任何特殊内容 - 只有原始标准设置 - appSettingsuserSettings 部分。 在我开发的 PC 上,一切都完美无缺。当我将这些二进制文件复制到这个特定的 VM 并尝试启动时,问题才开始出现。

另请注意 - 这些可执行文件未安装在 GAC 等中,我只是将它们复制到 VM 上的文件夹中并启动。当它是第一次时一切正常。

因此,问题模式如下:

  1. 将 .NET 可执行文件复制到新的 VM(Win 7 x64),运行它,一切正常。关闭它。
  2. 在主机 PC 上构建新版本的 .NET 可执行文件,将新的 .NET 可执行文件复制到 VM(覆盖文件)。
  3. 尝试开始 - 遇到提到的问题。

经过一些萨满风格的操作(如操作系统重启等)它开始工作,但为什么会发生这种情况呢?!

为什么用新版本替换 .NET 可执行文件会导致如此大的问题?!​​

还有一个大问题 - 是否有任何特殊程序来替换 .NET 可执行文件以保持它们正常工作?因为这是一个新的应用程序开发,我不想在每个新的可执行文件安装上浪费太多时间。 :-\

你能帮忙吗?因为它看起来很奇怪!

先谢谢你。

附言。我检查了所有 VS 项目——它们都有 PlatformTarget=AnyCPU。同样在运行时,我可以看到 ProcessType=MSIL(我在应用程序的 AboutBox 中显示此信息)。因此,没有混合 x86/x64 二进制文件。

最佳答案

这似乎与映射的网络驱动器行为有关。 当我从网络驱动器文件夹复制新文件时,它复制了错误的文件 - 新文件和旧文件的奇怪随机困惑(在我在 VM 主机上更新它们之前它们就在那里)。

让它工作的场景:

  1. 在 VM 上:删除网络驱动器上文件夹中的所有文件
  2. 在 VM 主机上:将新文件复制到 在 VM 上映射为网络驱动器的文件夹
  3. 在 VM 上:将文件复制到目标文件夹
  4. 在 VM 上:运行应用程序 - 现在可以运行了

奇怪的事情。我记得在复制更新的 win32 二进制文件时,我在 Windows 2008 上的 Windows 资源管理器 中看到了类似的行为。

关于c# - .NET 可执行文件在被新版本覆盖后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302733/

相关文章:

c# - Caliburn Micro,来自单个 View 模型的多个 View

c# - 如何在 codedom 编译代码中调试/中断

.net - 是否可以将 .NET System.Diagnostics.Process 对象附加到正在运行的进程?

c# - JSON 压缩器/解压缩器工具

c++ - native 应用程序可以使用免注册 COM 来使用 .NET COM 组件吗?

com - 将 Activation Context API 与不同位置的许多 dll 一起使用

使用 list 在 LoadLibrary 中搜索 Windows 路径

c# - 如何使用 TDD 测试没有 args 构造函数和 setter 的外观类?

c# - 何时在托管模式和非托管模式下使用 C++

c# - 键集未定义