如何正确引用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.FileNotFoundExceptionHResult=0x80070002Message=无法加载文件或程序集"System.Runtime,Version=4.2.20,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"或其依赖项之一。系统找不到指定的文件。来源=StackTrace:

我做错了什么?

您不能将Console应用程序用作库。您要么必须将其转换为库类型项目,要么以"的形式运行;。exe";具有适当的参数。

因此,从技术上讲,有三种选择:

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

右键单击项目->属性->应用程序->输出类型:"类库">

  1. 如果您仍然需要Console应用程序,并且希望在Console和WinForms之间共享相同的逻辑,请将所有逻辑移动到类库,并在Console和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,在这种情况下,我总是创建一个类库项目。然后,在控制台应用程序中,我添加对类库的引用。尝试这种方法并检查异常是否消失。

相关内容

  • 没有找到相关文章

最新更新