我正在将一个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)
失败仍然存在。
答案 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.0
和sku
值的值只是Visual Studio 2013(在安装了.NET Framework 4.5.1的系统上)的默认值,因此实际值可能会有所不同,具体取决于您使用的IDE版本。可能需要针对特定情况调整v4.0
和sku
值的示例值。
链接:
答案 1 :(得分:1)
我遇到了同样的错误,结果发现我的app配置文件中有一个条目导致它:
<add key="EmailNotificationList" value="this&that@doamin.com;theotherthing@domain.com"/>
......我必须改为:
<add key="EmailNotificationList" value="this&that@doamin.com;theotherthing@domain.com"/>
希望这有助于某人。