繁体   English   中英

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

[英]Fix a side-by-side error in .NET application

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

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

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

开始激活上下文生成。

输入参数:

标志= 0

ProcessorArchitecture = AMD64

CultureFallBacks = zh-CN; en; zh-CN

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


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

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

结束激活上下文生成。

由于缺乏足够的信息,我怀疑问题可能与Interop有关,因此我进行了一些实验,但都没有一个解决问题。

该应用程序可与Excel(最初是Office 2003 Professional Excel 2003互操作。 由于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 Interop相关的引用。 同样,“ Add Reference > Assemblies > Extensions下也没有任何内容。 我之所以这么说是因为在其他Q和A (链接)中 ,您可以看到在VS 2012和VS 2010中,似乎应该可以通过在引用管理器中找到Microsoft.Office.Interop.Excel来解析引用,但是不幸的是,不在我的VS 2013安装中。

在“ Add Reference > COM ,有一个称为Microsoft Excel 15.0 Object Library (Version 1.8)的引用。 这样可以构建项目,但并排故障仍然存在。 这个MSDN页面似乎表明这是使用VS 2013时解析引用的正确方法,因此我不必担心DLL的血统已经有几年了。

我还应该尝试什么解决并排故障?

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

这个答案消除了在激活应用程序时出现的并行错误消息,但是我对该问题的了解不足,无法说出它是否接近一个好的答案。

此答案假定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或更高版本,则使用所选的CLR版本加载使用.NET Framework早期版本创建的混合模式程序集。 设置此值可防止CLR 1.1版或CLR 2.0版加载到同一进程中,从而有效地禁用进程内并行功能。

如果为false ,则使用以下引号。

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

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

链接:

启动元素的MSDN描述

在此解决方案中被禁用的COM-Interop-by-side-side-by-side-side

我也遇到了同样的错误,结果是我的应用程序配置文件中有一个条目导致该错误:

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

...我必须更改为:

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

希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM