用新版本

时间:2016-03-30 07:50:24

标签: c# .net side-by-side

我遇到了非常奇怪的行为 - 在我用网络驱动器的新版本覆盖.NET exectables后,它无法启动。 当尝试从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 Client Profile构建的。

我没有在那里定义任何特殊的“清单”。只需在Visual Studio中单击“新建Windows窗体项目”并进行开发即可。 此外,app.config不包含任何特殊内容 - 仅原始标准设置 - appSettings userSettings 部分。 在我开发它的PC上,一切都很完美。只有当我将这些二进制文件复制到此特定虚拟机并尝试启动时才会出现问题。

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

因此,问题模式如下:

  1. 将.NET执行副本复制到新VM(它是 Win 7 x64 ),运行它,一切正常。关闭它。
  2. 在主机PC上构建新版本的.NET执行程序,将新的.NET执行程序复制到VM(文件覆盖)。
  3. 尝试开始 - 提到了问题。
  4. 经过一些萨满式动作(比如操作系统重启等),它开始起作用,但为什么会发生这种情况?!

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

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

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

    谢谢你。

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

1 个答案:

答案 0 :(得分:0)

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

使其运作的方案:

    VM上
  1. :删除网络驱动器文件夹中的所有文件
  2. VM主机上的
  3. :将新文件复制到文件夹中,该文件夹在VM上映射为网络驱动器
  4. on VM :将文件复制到目标文件夹
  5. VM上的
  6. :运行应用程序 - 现在可以使用
  7. 奇怪的是。我记得在复制更新的win32二进制文件时,我在Windows 2008上看到了与 Windows资源管理器类似的东西。