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意味着它属于 class 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

当执行一个用 C# 编写的程序时,CLR 会搜索一个用 .entrypoint IL 指令标记的静态方法,该指令要么不接受参数,要么接受一个 string[] 类型的参数,并且返回类型为 void 或 int,并且执行它

所以无论你必须做什么,你都必须在静态主函数中调用它

于 2013-04-30T14:27:51.770 回答
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 回答
0

采用

public static void Main()
{
}
于 2013-04-30T18:59:31.080 回答