将C#控制台应用程序转换为DLL

9
我正在将Betfair API从SOAP转换为JSON,并且已经开始使用控制台APP的方式进行重写,然后从任务计划程序或Windows服务中调用该API。
但是现在我被要求对代码执行各种不同的任务,而我不想为每个任务编写一个控制台应用程序(不同的站点需要价格、下注等)。
新的代码库比旧的大得多,我原本可以将4个文件从旧系统复制到DLL应用程序中,然后创建各种控制台应用程序/服务来实现DLL - 但是因为它有40多个文件,如果可能的话,我不想进行复制并粘贴。
是否有一种方法可以轻松地将现有的控制台项目转换为类/DLL项目,使用VS中的某些工具或命令即可?
我希望能够创建简单的应用程序,只需这样做:
BetfairBOT myBOT = new BetfairBOT()
myBOT.RunGetPrices();

或者
BetfairBOT myBOT = new BetfairBOT()
myBOT.RunPlaceBets();

我只需要2-3行代码来实现我的DLL注册到我的应用中。

那么,不复制粘贴,我能否做到这一点呢?

我正在使用VS 2012、.NET 4.5(或4.0,取决于服务器)、Windows 8.1。

非常感谢任何帮助。


不确定VS2012会做什么...先备份一下,然后试试看...据我所知,它只会更改输出类型定义(存储在.csproj XML文件中的GUID)和一些模板基础知识...作为类库,它应该编译成dll,而不是exe吧? - Paul Zahra
哈哈,是的,抱歉。我只是习惯于使用Windows应用程序和控制台应用程序。如果这不起作用,那么创建一个新项目,然后逐个手动复制类是唯一的方法吗?还是有自动化的方法?工具等。 - MonkeyMagix
1
我认为您只需要更改输出类型,但即使您不能,如果您的控制台应用程序是使用内部业务类编写的,您只需在解决方案资源管理器中拖放文件并修复名称空间即可。 - Michael Edenfield
无论CLR还是C#编译器实际上都不关心您的原始项目是否为控制台模式应用程序,也不关心其文件名扩展名。您只需在另一个项目中添加对该EXE的引用即可。您可能需要将某些类声明为public - Hans Passant
这个回答解决了您的问题吗?从C#控制台应用程序生成DLL文件 - Jim G.
显示剩余3条评论
1个回答

12

这个答案来自这里。虽然它使用的是winforms而不是控制台应用程序,但我认为你可以使用它。

创建DLL的步骤

步骤1:- 文件->新建->项目->Visual C# 项目->类库。选择您的项目名称和适当的目录,单击“确定”

使用Visual Studio .NET创建C#类库(DLL)

单击“确定”按钮后,解决方案资源管理器会添加一个C#类“Class1.cs”。在这个类中,我们可以编写我们的代码。

使用Visual Studio .NET创建C#类库(DLL)

当我们双击Class1.cs时,我们会看到一个命名空间CreatingDLL。我们将在我们的项目中使用该命名空间来访问此类库。

使用Visual Studio .NET创建C#类库(DLL)

步骤2:- 在Class1.cs中,我们创建一个名为“sum”的方法,该方法接受两个整数值并返回传递给方法的数字之和。

using System;

namespace CreatingDLL
{
    public class Class1
    {
        /// <summary>
        /// sum is method that take two integer value and return that sum
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public int sum(int x, int y)
        {
            return x + y;
        }
    }
}

步骤 3:- 现在构建应用程序并查看我们项目的bin\debug目录。'CreatingDLL.dll'已创建。

现在我们创建另一个应用程序,并使用此DLL(CreatingDLL.dll)引用来访问DLL的方法。 访问已创建的DLL的步骤

步骤 4:- 文件 -> 新建 -> 项目 -> Visual C# 项目 -> Windows 窗体应用程序。

步骤 5:- 设计窗体如下图所示。

使用Visual Studio .NET创建C#类库(DLL)

步骤 6:- 添加我们几分钟前创建的DLL(CreatingDLL)的引用。

使用Visual Studio .NET创建C#类库(DLL)

使用Visual Studio .NET创建C#类库(DLL)

添加DLL引用后,将出现以下窗口。

使用Visual Studio .NET创建C#类库(DLL)

步骤 7:- 在Windows窗体应用程序的按钮单击事件中编写代码。在创建对象并调用DLL的方法之前,请在项目中添加名称空间CreatedDLL,如下所示:

using System;
using System.Windows.Forms;

using CreatingDLL;

namespace AccessingDLL
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            Class1 c1 = new Class1();
            try
            {
                txtResult.Text = Convert.ToString(c1.sum(Convert.ToInt32(txtNumber1.Text), Convert.ToInt32(txtNumber2.Text)));
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

第8步:- 构建应用程序并执行项目,查看输出。

使用Visual Studio .NET创建C#类库(DLL)

编辑: 要将应用程序更改为库,请执行以下步骤

首先,在“解决方案资源管理器”窗口中双击“属性”。

双击

然后,在打开的页面上,将“输出类型��从控制台应用程序更改为类库

更改输出类型


顺便问一下,你从未告诉我如何将200多个类复制到这个新项目中,而不需要一个一个地复制粘贴。我真的不想手动操作。我能把整个项目复制到新的类项目中吗? - MonkeyMagix
不用担心,我会的。上周我的腿肿了并且患上了红斑性细胞增多症,一直卧床休息,所以还没有机会去做这件事情。现在我会尝试去完成它。 - MonkeyMagix
大家好,看起来将代码转换为DLL的工作都很顺利,我创建了一个新的控制台应用程序,并将DLL作为引用。但是,当我实现它并调用其中一个方法时,我遇到了与DLL项目中的DB连接字符串相关的错误。代码行是private string Connectionstring = ConfigurationManager.ConnectionStrings["Brainiac"].ToString(); 错误是Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. at NewBOT.BetfairBOT..ctor() in c:...\BetfairBOT2\BetfairBOT.cs:line 31(连接字符串所在的行)。 - MonkeyMagix
出现错误的代码是我正在尝试从我的控制台应用程序中使用的DLL类的init,例如public Control(int systemPK) { this.BetfairBOT = new BetfairBOT(); //在连接字符串行内部出错 this.HelperLib = new HelperLib();
}而我在我的新控制台应用程序中使用的代码来调用此代码是static void Main(string[] args) { Console.WriteLine("IN MAIN"); // 正常工作Control control = new Control(3); // 这个失败了}
- MonkeyMagix
似乎与ConfigurationManager对象有关,因为我将连接字符串移动到DLL中的另一个init下面,这只是从DLL中的App.Config获取了一个字符串值(我需要将其从App.Config重命名为DLL中的其他内容吗?),但在此行this.logfilename = System.Configuration.ConfigurationManager.AppSettings["Logfile"].ToString();也出现了错误。所以任何涉及ConfigurationManager管理器的东西似乎都会出错 - 我需要将其添加为控制台应用程序的引用吗?就像我对DLL应用程序所做的那样?还是其他什么? - MonkeyMagix
显示剩余13条评论

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