0

[NAnt] ビルド プロセスで Microsoft.SqlServer.Smo.dll バージョン 9.0.1399.0 を使用しています。Windows Server 2008 R2 で実行しています。Sql Server 2008 R2 (10.5) と Sql Server 2008 (10.0) の両方に接続しています。

プロジェクト タイプの 1 つのデプロイ ステップを微調整していますが、Sql ジョブをデプロイするすべてのビルドで (2008R2 10.5 サーバーに)、"ConnectAsUserName が設定されていません" というエラーがスローされます。

資格情報を指定すると、「この Sql Server バージョン (10.5) はサポートされていません」というエラーが表示されます。

しかし、Windows 認証を指定すると、「ConnectAsUserName が設定されていません」というエラーが表示されます。

他にどこを見るべきかわかりません。使用しているコードは次のとおりです。

using System;
using System.Collections.Generic;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo.Agent;

...

public void Schedule(string sqlServer, string userName, string password)
{
    ServerConnection conn = new ServerConnection(sqlServer, userName, password);
    conn.LoginSecure = false;

    Server server = new Server(conn);
    Schedule(server);
}

public void Schedule(string sqlServer)
{
    ServerConnection conn = new ServerConnection(sqlServer);
    conn.ConnectAsUser = false;
    conn.LoginSecure = true;

    Server server = new Server(conn);
    Schedule(server);
}

public void Schedule(Server server)
{
    server.JobServer.Refresh();
    JobType.Refresh();

    foreach (JobType job in Items)
        job.Schedule(server);
}

また、エラーのスタックトレースは次のとおりです。

内部エラー: Microsoft.SqlServer.Management.Common.PropertyNotSetException プロパティ ConnectAsUserName が設定されていませんでした。

Microsoft.SqlServer.Management.Common.ConnectionSettings.ThrowIfPropertyNotSet (文字列 propertyName、文字列 str、ブール値 checkEmpty) で Microsoft.SqlServer.Management.Common.ConnectionManager.GetWindowsIdentityForConnection() で Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() で
Microsoft.SqlServer.Management.Common.ConnectionManager.PoolConnect() で Microsoft.SqlServer.Management.Common.ConnectionManager.get_ServerVersion() で Microsoft.SqlServer.Management.Smo.ExecutionManager.GetServerVersion() で Microsoft.SqlServer.Management.Smo Microsoft.SqlServer.Management.Smo.SqlSmoObject.CheckVersionNotExpress(String uft) の .SqlSmoObject.IsExpressSku ()
Microsoft.SqlServer.Management.Smo.Server.get_JobServer() の
NAnt.MVST.Tasks.ImportJobsTask.ExecuteTask(String xmlJobs) の SqlSchedule.Jobs.Schedule(サーバーサーバー) NAnt.MVST.Tasks.ImportJobsTask.ExecuteTask() の NAnt.Core .Task.Execute() で NAnt.Core.TaskContainer.ExecuteChildTasks() で NAnt.Core.TaskContainer.ExecuteTask() で NAnt.Core.Task.Execute()
で NAnt.Contrib.Tasks.TryCatchTask.ExecuteTask() で NAnt .Core.Task.Execute() で NAnt.Core.TaskContainer.ExecuteChildTasks() で NAnt.Core.Tasks.IfTask.ExecuteTask() で NAnt.Core.Task.Execute()
で NAnt.Core.TaskContainer.ExecuteChildTasks() NAnt.Core.Tasks.IfTask.ExecuteTask() で NAnt.Core.Task.Execute() で
NAnt.Core.TaskContainer.ExecuteChildTasks()で NAnt.Core.Tasks.IfTask.ExecuteTask()で NAnt.Core.Task.Execute()
で NAnt.Core.Target.Execute()で NAnt.Core.Project.Executeで(String targetName, Boolean forceDependencies) NAnt.Core.Tasks.CallTask​​.ExecuteTask() で NAnt.Core.Task.Execute() で NAnt.Core.TaskContainer.ExecuteChildTasks() で NAnt.Core.Tasks.IfTask.ExecuteTask( ) で NAnt.Core.Task.Execute()
で NAnt.Core.Target.Execute() で NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) で NAnt.Core.Tasks.CallTask​​.ExecuteTask() で NAnt .Core.Task.Execute() で NAnt.Core.Target.Execute() で NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) で NAnt.Core.Project.Execute() で NAnt.Core.Project.走る()

また、MSDN のドキュメントには、Windows 認証を使用している場合、このプロパティは無視されると記載されています...

私はstackoverflowでこの投稿を見つけました.私は唯一の答えですべてのことをしました(それは受け入れられませんでしたが)。誰かもうアイデアはありますか?

4

1 に答える 1

0

最初は、この投稿の回答と同じようにすべてをセットアップしました。しかし、さらに調査した結果、アセンブリの 1 つが 100 フォルダーではなく 90 フォルダーから来ていることがわかりました。これを変更すると、問題が解決しました。

于 2012-09-05T15:22:38.030 に答える