与控制台和DLL

时间:2016-08-17 07:06:17

标签: c# visual-studio post-build-event

我在Visual Studio中有一个C#项目,其中Console Application为输出类型。

但我还需要这个项目Class Library用于另一种解决方案。

现在我必须每次都切换输出类型,但我想知道是否可以在同一exe生成dllbuild-event

这有post-build-event吗?

7 个答案:

答案 0 :(得分:11)

据我所知,编译后无法更改输出类型。话虽这么说,如果你的解决方案中可以有两个项目,如 Console Library ,它们会使用相同的源代码文件,但是有不同的输出类型。这样你就可以得到不同的输出,而不需要重复代码。

答案 1 :(得分:4)

通常可以引用.net exe程序集,因为它将是一个类库。

所以你可以坚持创建一个exe文件并在你的其他项目中引用exe(听起来很奇怪,但有效)。

这是用于浏览参考的对话框。如您所见,您可以选择exe文件。 Browse for Reference Dialog

但是评论说它实际上取决于你的用例是什么。 我不建议向客户发送带有入口点的exe,希望客户不会发现exe。但你可以做的就是条件性地编译你的切入点。

例如

class Program {
  // This is the entry point of the EXE
  public static void Main() {
#if DEBUG
  // Start Debug Application
  ...
#else
  // Shipped to client - Entry point disabled
  return;
#endif
  }
}

如果有相关的理由要发运一个exe和一个附带的类库,我会像这样重构你的解决方案:

  • (A)完整申请(.sln)
    • (B)控制台应用程序(.csproj),其中引用了(C)
    • (C)类库项目(.csproj)

有了它,其他人都非常清楚,有一个应用程序使用库和库本身。

答案 2 :(得分:2)

控制台应用程序是项目的类型。你无法改变它。

您可以 - 而且必须做的是,将您的逻辑带入类库项目,并使用您想要的任何类型的项目中的类库。

答案 3 :(得分:2)

您应该将项目编译为dll,然后在控制台应用程序中使用此dll。

实现您想要的功能的可能性是在项目的构建后事件上手动运行msbuild。

请参阅:How do i build a solution programatically in C#?

Building C# Solution in Release mode using MsBuild.exe

答案 4 :(得分:1)

通常的解决方案是使用包含两个项目的解决方案:

  • 包含所有代码(构建到DLL中)的类库
  • 引用其Main只调用某些函数的库的控制台应用程序。

有关详细信息,请查看MSDN page on Solutions

Codor建议手动将文件添加到Console项目中,但一个缺点是两个版本之间不共享构建设置,因此可能会出现一些不一致。

答案 5 :(得分:0)

我不确定为什么人们认为这不可能,但实际上是。

最简单的方法是将exe重命名为dll声音愚蠢,我知道。但它在许多情况下都有效。另外,正如“Peter I”所说,.NET exe可以在其他项目中作为程序集导入。所以你可能实际上并不需要一个dll。

另一种方法是使用此处所述的C# command line/out (C# Compiler Options)

您可以在Pre / Post构建事件Pre-build Event/Post-build Event Command Line Dialog Box

中使用命令命令行选项

答案 6 :(得分:0)

我有类似的要求,在这篇文章或任何地方都找不到明确的答案。我目前有一个类库,并且想创建一个控制台应用程序项目而不复制任何代码。理想情况下,应该有两个项目,一个用于创建控制台应用程序,另一个用于创建类库。这就是视觉工作室的建议。当我尝试运行类库时,收到以下消息。

enter image description here

它显然要求我们将可执行项目添加到解决方案中,并将引用添加到库项目中。

下面是执行此操作的步骤。

  

右键单击解决方案->添加新项目->控制台应用程序->选择名称->确定。

     

右键单击控制台项目->添加引用->在引用管理器中,单击项目选项卡并选择其他项目(在我的情况下,这是类库项目,在未列出的情况下,只需单击浏览并选择.csproj文件)->确定。

现在要使用其他项目中的类,只需执行using LibraryProjectNameSpace

我们在那里。宾果!!!

Also as mentioned in the other answers it is not possible to have the same project generate both .exe and .dll. But you can have the same solution generate these two guys by having two projects. In this way there is no need to switch the output of the project every time.

仅供参考,我使用Visual Studio 2017