是否可以在C#中的项目之间静态共享代码?

时间:2011-10-05 16:03:03

标签: c# visual-studio

在C#中,是否有可能在没有需要分发DLL的情况下在Visual Studio项目之间共享代码?

我正在维护一些由几个Visual Studio C#项目组成的软件,每个项目都构建一个简单的控制台可执行文件。我想搬出的项目之间有很多共享代码。我相信我可以将代码放在类库项目中,但我宁愿避免使用DLL来分发每个可执行文件。

这有什么办法吗?我是C#的新手,所以也许我认为这一切都错了 - 有没有其他的建议?

9 个答案:

答案 0 :(得分:4)

您可以使用ILMerge将类库与exe。

组合在一起

http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

答案 1 :(得分:3)

好吧,我个人的偏好是咬紧牙关并分发DLL。这是最干净,最惯用的选择。

其他选择:

  • 如果我没记错的话,您可以在项目目录外的现有源文件中添加“链接”,但这有点奇怪。
  • 您可以使用ilmerge将类库合并为可执行文件作为构建后步骤

答案 2 :(得分:3)

您可以在Visual Studio中将代码添加为链接文件 - 右键单击​​项目,选择“添加/现有项目”,然后在“添加”按钮上单击下拉箭头并选择“添加为链接”。 / p>

这会在项目中创建添加文件的快捷方式,而不是复制它,这意味着您只维护一个源文件,但仍然可以将其编译到需要的位置。

我认为类库会更整洁,但如果你想避免这种情况,那么捷径就是一个简单的选择。

答案 3 :(得分:1)

一种选择是使用ilmerge

ilmerge /target:winexe /out:SelfContainedProgram.exe Program.exe ClassLibrary1.dll ClassLibrary2.dll

正常编译您的应用程序和类库,然后将类库与程序合并。你甚至可以have a post build step to do this for you

答案 4 :(得分:0)

将文件添加到项目时,添加按钮上有一个下拉列表,可将其添加为链接内容。

然后原始位置的变化将反映在链接的位置。

答案 5 :(得分:0)

我不确定你的理想情况是什么?如果您不想分发任何其他文件,那么代码必须驻留在您的exe中。你可以从另一个exe引用一个exe,但是如果exe A引用exe B,那意味着你不能分发A而不分发B.

答案 6 :(得分:0)

您可能希望在可执行文件的程序集中嵌入或合并类库程序集。这已在前面讨论过。 试试这里:Embedding assemblies inside another assembly

答案 7 :(得分:0)

可以在项目之间共享代码。只需创建一个VS.NET解决方案。将每个项目添加到解决方案中。应用适当的项目参考。您的单个VS.NET解决方案可以拥有构建到控制台应用程序的n个项目。到目前为止,这是在项目之间共享代码的最简单方法。

答案 8 :(得分:0)

除了发布的所有其他优秀方法之外,您还可以将DLL打包为EXE的嵌入式资源,并使用Assembly.Load(byte[])在运行时将程序集加载到内存中。