c# - 如何正确引用 C# 中不同项目中的代码?
问题描述
简而言之:我有一个带有静态字典的控制台应用程序,它在编写它们的项目中工作正常。我如何正确引用这个项目,以便我可以从不同的项目中做同样的事情?每次我尝试调用函数将数据加载到其中时都会出错。
长话短说:对于一个学校项目,我正在使用本地搜索算法为一家垃圾收集公司制作调度程序。我在控制台应用程序中拥有一切(项目名称:LocalSearch),但我想制作一个可视化工具,以便更好地分析它产生的解决方案。为此,我正在使用 Windows 窗体应用程序(项目名称:ScheduleVisualiser),并且我想引用控制台应用程序,因此我不必再次加载数据。
在控制台应用程序中,我在 Program 类中完成了所有数据加载。我有以下代码:
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 Message=无法加载文件或程序集'System.Runtime,版本=4.2.2.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。该系统找不到指定的文件。来源=堆栈跟踪:
我究竟做错了什么?
解决方案
您不能将控制台应用程序用作库。您要么必须将其转换为库类型项目,要么作为具有适当参数的“.exe”运行。
因此,从技术上讲,有 3 个选项:
- 如果您不再需要控制台应用程序 - 只需将项目类型更改为类库:
右键单击项目-> 属性-> 应用程序-> 输出类型:'类库'
如果您仍然需要控制台应用程序并希望在控制台和 WinForms 之间共享相同的逻辑 - 将所有逻辑移动到类库并在控制台和 WinForms 中使用。
如果您只需要来自控制台应用程序的输入/输出数据 - 您可以将其作为外部应用程序运行(但这是最坏的情况)
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(); }
推荐阅读
- php - 如何使用php将2个不同输入中的2个文件上传到数据库中
- php - Sql error "Syntax error or access violation: 1064"
- python - 100% 的训练和评估准确率,也尝试过梯度裁剪
- linux - Ubuntu 18 中的服务崩溃问题
- .net - WCF 客户端 - 无法为 SSL/TLS 建立安全通道
- python - Django 表单从 request.POST 收到错误的数据
- file-io - 打开文件返回 ErrorKind::Other '错误:Os,代码:20,消息:“不是目录”'
- java - 当更改运行时类型选项未显示时,如何在 google colab 中更改运行时类型?
- java - 当应用程序在 netbeans 中运行时,我可以使内部框架消失吗?(爪哇)
- java - 如何在java中拆分组件的数学表达式?