0

多くのソースを調べてみましたが、C# 開発者ではないため、何をする必要があるのか​​ わかりません。私がこのプロジェクトを割り当てられた唯一の理由は、接続する必要がある Web サービスが明らかに C# でのみ互換性があるためです。ですから、このプロジェクトを成し遂げるために、私はただ学んでいます。そして、私たちの部門には誰もいません。C# を知っています。私は SSIS パッケージを構築しており、C# を使用して「スクリプト タスク」を実行しています。ツールが作成するscriptMain.csはこちら

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using ST_3c3fd2f1b7404161b62ff2b81f12192c.ServiceClient;

namespace ST_3c3fd2f1b7404161b62ff2b81f12192c.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain :     Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

    public void MainScript()
    {
        // TODO: Add your code here
        Program.Main();//I AM TRYING TO MAKE THE CALL TO PROGRAM.cs file Main() method
        Dts.TaskResult = (int)ScriptResults.Success;
    }
}
}

この ScriptMain.cs は、SSIS を実行したときに実行されるファイルだと思います。だから私は上から scriptMain.cs (Program.Main()) から以下のファイル Program.cs への呼び出しを試みています:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ST_3c3fd2f1b7404161b62ff2b81f12192c.ServiceClient;
using ST_3c3fd2f1b7404161b62ff2b81f12192c.csproj;

namespace ST_3c3fd2f1b7404161b62ff2b81f12192c
{
class Program
{
    static void Main()//Trying to call this so that it can execute its   methods/processes
    {
        WebClient client = GetClient();

        // Example 1 - Select Changes
        SelectTicketChanges(client);
        SelectStepChanges(client);
    }

ご覧のとおり、この Main() メソッドは他のメソッドを呼び出します。これは私が書いたものではありません。接続しようとしているクライアントから提供されたものです。

現在、Program.Main()、Main() の下に「保護レベルが原因で Program.Main() にアクセスできません」という赤いエラーが表示されます。

私が変われば

 static void Main()

 public void Main()

私の ScriptMain.cs Program.Main() よりもすべて、「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です..」という赤いエラーが表示されます。

他のメソッドを呼び出して、その機能を実行できるようにしたいだけです。

できる限り技術的でないことができれば、それは本当に素晴らしいことです。私が言ったように、私はこのプロジェクトを通して C# を学んでいます。

ありがとう!

4

5 に答える 5

3

次のように変更します。

public static void Main()

要するに、これはstaticとどまる必要があるからです。

もう少し詳しく説明すると、メソッドのデフォルトのアクセシビリティはprivateであるため、既存のメソッドは と同等private static void Main()です。publicこれは、クラスから呼び出すことができるように変更する必要がありますScriptMain

これstaticは、クラスに属し、インスタンスではなくProgramとして呼び出すことができることProgram.Main()を意味します。つまり、インスタンスからのみ呼び出すことができますnew Program().Main()

于 2013-04-30T14:29:06.857 に答える
2

試す

public class Program
{
    public static void Main()
    {
于 2013-04-30T14:27:29.627 に答える
0

使用する

public static void Main()
{
}
于 2013-04-30T18:59:31.080 に答える
0

OO (オブジェクト指向) プログラミングと C# 全般について調べる必要があるようです。http://www.codeproject.com/Articles/219869/Object-Oriented-Programming-in-Csharp-NET

しかし、あなたの質問に答えるために、静的メソッドにアクセスしたい場合は、それらのクラスを参照してからそれらを参照します。次に例を示します。

Program.Main(); 

非静的メソッドにアクセスするには、最初にオブジェクト (より正確には「クラス」) をインスタンス化する必要があります。例:

MyClass c = new MyClass();
c.Method();

追加: Visual Studio はそれがプログラムのエントリ ポイントであると考えているため、そのコードのコンパイル/実行に問題がある可能性がありますProgram.Main()(実際にはそうではありません) ScriptMain.MainScript()。ソリューション プロパティを調べて、実際にエントリ ポイントであることをコンパイラに伝える必要があります。 .

于 2013-04-30T14:28:28.123 に答える