修复.NET应用程序中的并排错误

时间:2014-04-29 06:05:38

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

我正在将一个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工具不提供我能够有效解释的任何信息。以下是该工具的人类可读输出。

  

开始激活上下文生成。

     

输入参数:

     

Flags = 0

     

ProcessorArchitecture = AMD64

     

CultureFallBacks = en-GB; en; en-US

     

ManifestPath = C:\ Users \ Brian \ Documents \ Visual Studio   2013 \项目\ WebInterface1 \ WebInterface1 \ BIN \调试\ WebInterface1.exe

     

AssemblyDirectory = C:\ Users \ Brian \ Documents \ Visual Studio   2013 \项目\ WebInterface1 \ WebInterface1 \ BIN \调试\

     

应用程序配置文件= C:\ Users \ Brian \ Documents \ Visual Studio   2013 \项目\ WebInterface1 \ WebInterface1 \ BIN \调试\ WebInterface1.exe.Config

     
     

信息:解析应用程序配置文件C:\ Users \ Brian \ Documents \ Visual   工作室   2013 \项目\ WebInterface1 \ WebInterface1 \ BIN \调试\ WebInterface1.exe.Config。

     

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

     

结束激活上下文生成。

由于信息很少,我怀疑问题可能与Interop有关,所以我进行了一些实验,但都没有解决问题。

该应用程序最初与Excel 2003的{​​{1}}进行互操作。由于Office 2003 Professional已过时,我升级到Office 2003 Professional并转换了我的应用程序需要与之互操作的Excel文件。当我的应用程序运行时,升级没有明显的区别;并存的失败仍然存在。

Interop DLL是Office 2013 Home and Student(来自VS 2010项目的#34;源代码"以及之前的VS 2008项目,所以我不知道它的系谱)但为了尝试任何随机的东西来解决并排问题,我试图使用不同的引用来重新构建。在Microsoft.Office.Interop.Excel.dll下,没有与Excel Interop相关的引用。同样,Add Reference > Assemblies > Framework下也没有。我提到这一点是因为在这个其他Q和A (link)中,您可以看到在VS 2012和VS 2010中,似乎应该可以通过在参考管理器中查找Add Reference > Assemblies > Extensions来解析引用,但是不幸的是,不是我安装的VS 2013。

Microsoft.Office.Interop.Excel下,有一个名为Add Reference > COM的引用。这允许项目构建,但并行故障仍然存在。这个MSDN page似乎表明这是在使用VS 2013时解析引用的正确方法,因此我不必担心已经使用了多年的DLL的谱系。

我还应该尝试解决并排失败的问题?

更新我删除了所有支持C ++的VS Redistributables。如前所述,我正在使用C#。我删除并重新安装了VS 2013.我删除了Office 2003. Microsoft Excel 15.0 Object Library (Version 1.8)失败仍然存在。

2 个答案:

答案 0 :(得分:2)

此答案消除了应用程序激活时的并排错误消息,但我对该问题知之甚少,无法表明它是否接近成为一个好答案。

此答案假定Excel Interop由Visual Studio 2013 Add Reference > 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或更高版本构建的。该值是默认值。

当生成WPF应用程序时,v4.0sku值的值只是Visual Studio 2013(在安装了.NET Framework 4.5.1的系统上)的默认值,因此实际值可能会有所不同,具体取决于您使用的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

答案 1 :(得分:1)

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

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

......我必须改为:

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

希望这有助于某人。