一个解决方案中的 .Net 多个控制台应用程序项目将在一个控制台应用程序项目中被引用
.Net multiple console apps projects in a solution to be a referenced in one console app project
我需要有多个控制台应用程序
例如App1执行任务A,App2执行任务B,App3执行任务C
现在,
1)我需要App1能够选择性地执行App2和App3,这是基于配置标志控制的..
2) App2和App3应该是独立可执行的。
更新: 我可以让 App1 选择性地执行 App2 和 App3,主要问题是 App2 和 App3 有自己的配置,它们不会在 App1 的 bin 中生成文件夹,所以当我从那里执行 App2 或 App3 时,它会抱怨缺少配置。
请让我知道实现此目的的最佳方法。
如果您需要更多信息,请告诉我。
您最好的选择是将您的共享功能放入一个库项目中。在需要该功能的控制台应用程序中引用此库项目。
创建一个新的解决方案,将三个控制台应用程序作为项目。根据需要定义 App2 和 App3。然后,为 App3 添加其他应用程序作为引用。现在,在 App3 的代码中,您可以根据需要调用其他应用程序的主要方法。这行得通。但是,请注意,添加一个应用程序作为参考有点奇怪。
通常,您应该有一个引用其他 dll 的可执行文件。
您可以做的是,创建一个 class 库 (dll) 项目。在此项目中对所有 3 个功能进行编码。然后,创建 3 个单独的控制台应用程序,它们都引用此共享 dll,并根据配置和输入参数的要求使用共享 dll 提供的各种功能。
在不知道更多的情况下,我真正建议的唯一方法是,你有 app1.exe 运行 然后根据配置标志使用 case 语句来确定可执行文件 运行:
int configFlag = 1;
switch (configFlaf)
{
case 1:
process.start("app2.exe");
break;
case 2:
Console.WriteLine("app3.exe");
break;
default:
Console.WriteLine("Invalid Config Flag");
break;
}
或者您可以使用 if 语句:
if(configFlag1 && configFlag2)
process.start("app2.exe")
else
process.start("app3.exe");
如果您提供更多信息,我很乐意在此说明中加入更多信息和细节。
关于你更新1信息的扩展
我能看到绕过丢失的配置问题的唯一方法(特别是如果可执行文件在部署时不在同一个文件夹中)是启动 app2.exe 和 app3.exe 参数为或者:
- 配置文件的目录。
- app1.exe
的工作目录
所以你会像这样启动 app2.exe:
process.start("app2.exe", "c:\config\");
或
process.start("app2.exe", Directory.GetCurrentDirectory());
然后在app2.exe:
class app2.
{
static void Main(string[] args)
{
if (args.Length > 0"))
Environment.CurrentDirectory = (args[0]);
}
}
您可以在此处找到有关使用命令行参数的更多信息:
https://msdn.microsoft.com/en-us/library/aa288457%28v=vs.71%29.aspx
我的问题的解决方案非常简单。我所要做的就是
copy App2.config and App3.config to App1's bin/debug folder..
它就像一个魅力! :)
我需要有多个控制台应用程序
例如App1执行任务A,App2执行任务B,App3执行任务C
现在,
1)我需要App1能够选择性地执行App2和App3,这是基于配置标志控制的..
2) App2和App3应该是独立可执行的。
更新: 我可以让 App1 选择性地执行 App2 和 App3,主要问题是 App2 和 App3 有自己的配置,它们不会在 App1 的 bin 中生成文件夹,所以当我从那里执行 App2 或 App3 时,它会抱怨缺少配置。
请让我知道实现此目的的最佳方法。 如果您需要更多信息,请告诉我。
您最好的选择是将您的共享功能放入一个库项目中。在需要该功能的控制台应用程序中引用此库项目。
创建一个新的解决方案,将三个控制台应用程序作为项目。根据需要定义 App2 和 App3。然后,为 App3 添加其他应用程序作为引用。现在,在 App3 的代码中,您可以根据需要调用其他应用程序的主要方法。这行得通。但是,请注意,添加一个应用程序作为参考有点奇怪。
通常,您应该有一个引用其他 dll 的可执行文件。
您可以做的是,创建一个 class 库 (dll) 项目。在此项目中对所有 3 个功能进行编码。然后,创建 3 个单独的控制台应用程序,它们都引用此共享 dll,并根据配置和输入参数的要求使用共享 dll 提供的各种功能。
在不知道更多的情况下,我真正建议的唯一方法是,你有 app1.exe 运行 然后根据配置标志使用 case 语句来确定可执行文件 运行:
int configFlag = 1;
switch (configFlaf)
{
case 1:
process.start("app2.exe");
break;
case 2:
Console.WriteLine("app3.exe");
break;
default:
Console.WriteLine("Invalid Config Flag");
break;
}
或者您可以使用 if 语句:
if(configFlag1 && configFlag2)
process.start("app2.exe")
else
process.start("app3.exe");
如果您提供更多信息,我很乐意在此说明中加入更多信息和细节。
关于你更新1信息的扩展 我能看到绕过丢失的配置问题的唯一方法(特别是如果可执行文件在部署时不在同一个文件夹中)是启动 app2.exe 和 app3.exe 参数为或者:
- 配置文件的目录。
- app1.exe 的工作目录
所以你会像这样启动 app2.exe:
process.start("app2.exe", "c:\config\");
或
process.start("app2.exe", Directory.GetCurrentDirectory());
然后在app2.exe:
class app2.
{
static void Main(string[] args)
{
if (args.Length > 0"))
Environment.CurrentDirectory = (args[0]);
}
}
您可以在此处找到有关使用命令行参数的更多信息: https://msdn.microsoft.com/en-us/library/aa288457%28v=vs.71%29.aspx
我的问题的解决方案非常简单。我所要做的就是
copy App2.config and App3.config to App1's bin/debug folder..
它就像一个魅力! :)