繁体   English   中英

如何正确引用 C# 中不同项目中的代码?

[英]How do I correctly reference to code in a different project in C#?

简而言之:我有一个带有 static 字典的控制台应用程序,它们在编写它们的项目中运行良好。我如何正确引用这个项目,以便我可以从不同的项目中做同样的事情? 每次尝试调用 function 将数据加载到其中时,我都会收到错误消息。

长话短说:对于一个学校项目,我正在使用本地搜索算法为一家垃圾收集公司制作调度程序。 我在控制台应用程序中拥有一切(项目名称:LocalSearch),但我想制作一个可视化工具,以便更好地分析它产生的解决方案。 为此,我正在使用 Windows Forms 应用程序(项目名称:ScheduleVisualiser),我想引用控制台应用程序,因此我不必再次加载数据。

在控制台应用程序中,我在程序 class 中完成了所有数据加载。 我有以下代码:

public static Dictionary<int, Order> Orders = new Dictionary<int, Order>();

public static void Main()
{
    LoadData();
    ...
}

public static void LoadData()
{
    ...
}

现在我有我的 WFA 并且我添加了控制台应用程序作为参考,但是当我执行LocalSearch.Program.LoadData()时,Visual Studio 进入中断模式并引发以下预期:

System.IO.FileNotFoundException HResult=0x80070002 消息=无法加载文件或程序集“System.Runtime,版本=4.2.2.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。 该系统找不到指定的文件。 来源=堆栈跟踪:

我究竟做错了什么?

您不能将控制台应用程序用作库。 您要么必须将其转换为库类型项目,要么作为具有适当参数的“.exe”运行。

因此,从技术上讲,有 3 个选项:

  1. 如果您不再需要控制台应用程序 - 只需将项目类型更改为 Class 库:

右键单击项目 -> 属性 -> 应用程序 -> Output 类型:“类库”

  1. 如果您仍然需要控制台应用程序并希望在控制台和 WinForms 之间共享相同的逻辑 - 将所有逻辑移动到 Class 库并在控制台和 WinForms 中使用。

  2. 如果您只需要来自控制台应用程序的输入/输出数据 - 您可以将其作为外部应用程序运行(但这是最坏的情况)

     using (Process process = new Process()) { process.StartInfo.FileName = "ipconfig.exe"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); // Synchronously read the standard output of the spawned process. StreamReader reader = process.StandardOutput; string output = reader.ReadToEnd(); // Write the redirected output to this application's window. Console.WriteLine(output); process.WaitForExit(); }

Ciao,在这种情况下,我一直创建一个 Class 库项目。 然后,在控制台应用程序中,我添加对 Class 库的引用。 尝试这种方式并检查异常是否消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM