【问题标题】:Fix a side-by-side error in .NET application修复 .NET 应用程序中的并排错误
【发布时间】:2014-04-29 06:05:38
【问题描述】:

我正在将 C# 程序从 Visual Studio 2010 移植到 Visual Studio 2013。两者都是 IDE 的 Express 版本。在 2013 年的构建中,我遇到了并行失败。

The application has failed to start because its side-by-side configuration is incorrect.

sxstrace.exe 工具没有提供任何我能够有效解释的信息。这是该工具的人类可读输出。

开始生成激活上下文。

输入参数:

标志 = 0

处理器架构 = AMD64

CultureFallBacks = en-GB;en;en-US

ManifestPath = C:\Users\Brian\Documents\Visual Studio 2013\Projects\WebInterface1\WebInterface1\bin\Debug\WebInterface1.exe

AssemblyDirectory = C:\Users\Brian\Documents\Visual Studio 2013\Projects\WebInterface1\WebInterface1\bin\Debug\

应用程序配置文件 = C:\Users\Brian\Documents\Visual Studio 2013\Projects\WebInterface1\WebInterface1\bin\Debug\WebInterface1.exe.Config


INFO:解析应用程序配置文件 C:\Users\Brian\Documents\Visual 工作室 2013\Projects\WebInterface1\WebInterface1\bin\Debug\WebInterface1.exe.Config.

错误:激活上下文生成失败。

结束激活上下文生成。

由于信息不多,我怀疑问题可能与 Interop 有关,因此我进行了一些实验,但都没有解决问题。

应用程序与 Excel 互操作,最初是 Excel 2003 来自 Office 2003 Professional。由于Office 2003 Professional 已过时,我升级到Office 2013 Home and Student 并转换了我的应用程序需要与之互操作的Excel 文件。当我的应用程序运行时,升级并没有产生明显的变化;并行失败仍然存在。

Interop DLL 是 Microsoft.Office.Interop.Excel.dll(类似于 VS 2010 项目的“源代码”,在此之前是一个 VS 2008 项目,所以我不知道它的谱系)但是为了尝试任何随机为了解决并行问题,我尝试使用不同的参考来重新构建。在Add Reference > Assemblies > Framework 下,没有似乎与 Excel 互操作相关的引用。同样,Add Reference > Assemblies > Extensions 下也没有。我提到这一点是因为在另一个 Q 和 A (link) 中,您可以看到在 VS 2012 和 VS 2010 中,似乎应该可以通过在参考管理器中找到 Microsoft.Office.Interop.Excel 来解决参考,但不幸的是,在我安装的 VS 2013。

Add Reference > COM 下,有一个名为Microsoft Excel 15.0 Object Library (Version 1.8) 的引用。这允许项目构建,但并行失败仍然存在。这个MSDN page似乎表明这是在使用VS 2013时解决引用的正确方法,所以我不必担心已经承载了几年的DLL的谱系。

我还应该尝试什么来解决并行失败?

更新我删除了所有支持 C++ 的 VS Redistributables。如前所述,我使用的是 C#。我删除并重新安装了 VS 2013。我删除了 Office 2003。side-by-side configuration is incorrect 故障仍然存在。

【问题讨论】:

  • 我非常怀疑您的问题与 Visual Studio 2013 相关,重新安装很可能无法解决您的问题。您可以尝试删除并重新添加对 Excel 的所有引用。首先,清理您的 bin 文件夹并在项目中删除名称中带有 Interop 的所有引用。在添加引用对话框的 COM 部分中添加对正确版本的 Excel(您已安装的版本)的引用。
  • 我删除了每个 .DLL 和 .EXE 的 bin、obj 和 Properties 文件夹,并卸载了 Office 2013 和 VS 2013(以及相关的 SQL 程序),然后按此顺序重新安装了它们。我打开了项目并删除了对依赖项(.DLL 和 Microsoft Excel 15.0 对象库)的引用,并重新浏览了依赖项并重建了每个 .DLL 和 .EXE。并排的投诉仍然存在。
  • 删除 Properties 文件夹是不必要的,因为它不构成我的答案(如下)和要恢复的 PITA 的一部分。

标签: c# .net visual-studio-2013 windows-8.1 excel-interop


【解决方案1】:

我遇到了同样的错误,结果发现我的应用配置文件中有一个条目导致了它:

<add key="EmailNotificationList" value="this&that@doamin.com;theotherthing@domain.com"/>

...我不得不更改为:

    <add key="EmailNotificationList" value="this&amp;that@doamin.com;theotherthing@domain.com"/>

希望这对某人有所帮助。

【讨论】:

  • 太棒了!我遇到了同样的问题,问题是 app.config 的属性值内有一个额外的双引号,导致 XML 无效。修复它解决了问题。
【解决方案2】:

这个答案消除了应用程序激活时的并排错误消息,但我对这个问题的了解还不够,无法说出它是否接近成为一个好的答案。

此答案假定 Excel 互操作由 Visual Studio 2013 的 Add Reference &gt; COM 提供,其中有一个名为 Microsoft Excel 15.0 Object Library (Version 1.8) 的引用。

对于应用程序的 .EXE,创建一个 Visual Studio App.config 并在其中包含以下元素。

<startup useLegacyV2RuntimeActivationPolicy="true"> 
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

对解决方案中的每个 .DLL 依赖项执行相同操作。 如果正在构建库,VS 2013 默认不会创建 App.config,但可以通过右键单击轻松生成解决方案浏览器中的项目。

通过将useLegacyV2RuntimeActivationPolicy 属性设置为true,消息side-by-side configuration is incorrect 以及在激活时带有它的对话框将不再出现。

当它是true 时,以下引用适用。

为所选运行时启用 .NET Framework 2.0 运行时激活策略,该策略将旧版运行时激活技术(例如 CorBindToRuntimeEx 函数)绑定到从配置文件中选择的运行时,而不是将它们限制在 CLR 2.0 版中。因此,如果从配置文件中选择 CLR 版本 4 或更高版本,则使用 .NET Framework 的早期版本创建的混合模式程序集将使用所选的 CLR 版本加载。设置此值可防止 CLR 1.1 版或 CLR 2.0 版加载到同一进程中,从而有效地禁用进程内并行功能。

当它是false 时,以下引用适用。

使用 .NET Framework 4 及更高版本的默认激活策略,即允许旧运行时激活技术将 CLR 1.1 或 2.0 版加载到进程中。设置此值可防止混合模式程序集加载到 .NET Framework 4 或更高版本中,除非它们是使用 .NET Framework 4 或更高版本构建的。此值为默认值。

v4.0sku 的值只是 Visual Studio 2013(在安装了 .NET Framework 4.5.1 的系统上)生成 WPF 应用程序时的默认值,因此实际值可能会有所不同,具体取决于您正在使用哪个版本的 IDE。 v4.0sku 值的示例值可能需要针对特定​​情况进行调整。

链接:

The MSDN description of the startup element

The MSDN description of the side-by-side-for-COM-Interop-technology that is being disabled in this solution

【讨论】:

  • 所以我认为这是对您的问题的高级描述:您将项目移至 Visual Studio 2013,并且在此过程中项目可能从 .NET 2.0(或使用 2.0 的 3.5 ) 到 4.5。这导致 Excel 互操作库产生并行错误,您已经描述了该问题的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 2020-11-29
  • 2019-10-10
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多