.NET框架4.0中的SMO程序集

7
我正在使用 .net framework 4.0 并且在 Web 部署设置上工作,我已经引用了 sql server 2008 的 SMO 组件。当我在我的设置中使用 Smo 组件调用 ExecuteNonQuery 函数时,它会给出以下错误:"Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information." 但有时候它在我的代码中可以正常运行,而有时候会出现这个错误。
我使用相同的类、相同的方法,有时它能够正确运行,有时却会出现此错误。我对这个错误感到非常烦恼,找不到任何原因。我还想知道 SMO 组件是否可用于 .Net framework v4.0?
4个回答

11

Jimasp提出的解决方案不起作用。我很惊讶为什么还没有确切的方法来解决这个问题。搜索了两打以上的链接,但没有解决办法。使用SqlClient时,我遇到了“GO”语句的问题,因此也无法使用该方法。注意:我创建了一个Web Steup安装程序,并从中调用一个Windows窗体项目来执行这些T-Sql脚本相关代码,使用SMO。 - Faisal Mq
我尝试了这个方法,并且在使用Windows Forms时它确实有效。我的担忧是,我不知道useLegacyV2RuntimeActivationPolicy="true"可能会对未来产生什么副作用。 - Mike Malter

3

11
这可能与这个特定的问题无关,但是当你想调用ServerConnection.ExecuteNonQuery()并且其中包含GO关键字的SQL脚本时,你需要使用SMO库。 - slugster
我尝试了ADO(以及下面答案中使用的方法),并且使其正常工作。由于担心使用useLegacyV2RuntimeActivationPolicy="true"会产生副作用,因此我可能会坚持使用它。 - Mike Malter
我正在从单元测试中运行我的代码,因此我选择了这个选项,所以我的所有SQL脚本都不能有GO语句。解决方法:您可以扫描SQL脚本中的GO并将其拆分为较小的脚本。 - Sean

1

1
我自己也遇到了这个问题,添加上述标签(参见@jimasp的评论)似乎没有起作用,但是,我已经将它添加到了包含代码的项目的app.config中,然而,它被作为控制台应用程序的一部分使用。当我将其添加到控制台的app.config中时,它可以正常运行。我之前一直在错误的app.config中添加它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接