我遇到了非常奇怪的行为 - 在我用网络驱动器的新版本覆盖 .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 不包含任何特殊内容 - 只有原始标准设置 - appSettings 和 userSettings 部分。 在我开发的 PC 上,一切都完美无缺。当我将这些二进制文件复制到这个特定的 VM 并尝试启动时,问题才开始出现。
另请注意 - 这些可执行文件未安装在 GAC 等中,我只是将它们复制到 VM 上的文件夹中并启动。当它是第一次时一切正常。
因此,问题模式如下:
- 将 .NET 可执行文件复制到新的 VM(Win 7 x64),运行它,一切正常。关闭它。
- 在主机 PC 上构建新版本的 .NET 可执行文件,将新的 .NET 可执行文件复制到 VM(覆盖文件)。
- 尝试开始 - 遇到提到的问题。
经过一些萨满风格的操作(如操作系统重启等)它开始工作,但为什么会发生这种情况呢?!
为什么用新版本替换 .NET 可执行文件会导致如此大的问题?!
还有一个大问题 - 是否有任何特殊程序来替换 .NET 可执行文件以保持它们正常工作?因为这是一个新的应用程序开发,我不想在每个新的可执行文件安装上浪费太多时间。 :-\
你能帮忙吗?因为它看起来很奇怪!
先谢谢你。
附言。我检查了所有 VS 项目——它们都有 PlatformTarget=AnyCPU。同样在运行时,我可以看到 ProcessType=MSIL(我在应用程序的 AboutBox 中显示此信息)。因此,没有混合 x86/x64 二进制文件。
最佳答案
这似乎与映射的网络驱动器行为有关。 当我从网络驱动器文件夹复制新文件时,它复制了错误的文件 - 新文件和旧文件的奇怪随机困惑(在我在 VM 主机上更新它们之前它们就在那里)。
让它工作的场景:
- 在 VM 上:删除网络驱动器上文件夹中的所有文件
- 在 VM 主机上:将新文件复制到 在 VM 上映射为网络驱动器的文件夹
- 在 VM 上:将文件复制到目标文件夹
- 在 VM 上:运行应用程序 - 现在可以运行了
奇怪的事情。我记得在复制更新的 win32 二进制文件时,我在 Windows 2008 上的 Windows 资源管理器 中看到了类似的行为。
关于c# - .NET 可执行文件在被新版本覆盖后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302733/