4

我被这样尝试过:

using System;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Trace;

namespace SqlProfiller
{
    public partial class Form1 : Form
    {
        TraceServer reader = new TraceServer();
        SqlConnectionInfo connInfo = new SqlConnectionInfo();

        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            connInfo.ServerName = @".\SQLR2";
            connInfo.DatabaseName = "DB";
            connInfo.UserName = "sa";
            connInfo.Password = "123";

            reader.InitializeAsReader(connInfo, @"Standard.tdf");


            while (reader.Read())
            {
                Console.WriteLine("SPID  : " + reader["SPID"]);
                Console.WriteLine("Login : " + reader["SessionLoginName"]);
                Console.WriteLine("Object: " + reader["ObjectName"]);
                Console.WriteLine("Text  : " + reader["TextData"]);
                Console.WriteLine();

                textBox1.Text += "Event : " + reader["EventClass"] + Environment.NewLine;
                textBox1.Text += "SPID  : " + reader["SPID"] + Environment.NewLine;
                textBox1.Text += "Login : " + reader["SessionLoginName"] + Environment.NewLine;
                textBox1.Text += "Object: " + reader["ObjectName"] + Environment.NewLine;
                textBox1.Text += "Text  : " + reader["TextData"] + Environment.NewLine;
                textBox1.Text += "----------------------------------------------------------";
                textBox1.Text += Environment.NewLine;
                Application.DoEvents();
            }
        }
    }
}

错误:

Microsoft.SqlServer.Management.Trace.SqlTraceException:无法将对象初始化为读取器。---> System.IO.FileLoadException:混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。

无法将对象初始化为读取器。

这是什么意思?

提前致谢

4

2 回答 2

5

What does this mean?

System.IO.FileLoadException: 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.

这意味着您的进程作为 .NET 4 进程运行,并且您正在加载的程序集是 .NET 2 编译的 ( Microsoft.SqlServer.Management)。

重新编译您的应用程序以使用 .NET 2 或在配置中添加 .NET 4 的提示以允许 .NET 2 程序集。

于 2012-08-16T12:46:57.243 回答
3

如果运行您的代码(在 VS 2013 中使用 .NETFramework v 4.5 针对 Microsoft SQL Server 2008 构建,您将收到以下错误:

无法将对象初始化为读取器。混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。

您可以通过在 VS 项目中更改 App.config 来修复它,默认情况下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

对此(少量补充)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup  useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

另外,当我使用解决方案添加程序集 -> 添加程序集 -> 浏览时,我使用了“100”文件夹,而不是下面路径中的“110”:

C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.ConnectionInfoExtended.dll

但是,可能它也将与 110 一起使用。

我希望,这个解决方案会有所帮助。

于 2014-02-25T09:44:38.133 回答