为您的每个项目创建一个网络模块或一个程序集,然后将它们全部编译/合并到一个程序集中。
第一个替代方案。这是由Jay R. Wren提出的:
这是一个可爱的 hack,但由于 CSC 和 VBC 都支持 /target:module 和 /addmodule 选项,您实际上可以在没有 ILMerge 的情况下做到这一点使用 shell 脚本或 make 文件。
Visual Studio 不支持“netmodule”类型,但 MSBuild 支持。
将 VB 项目添加到您的解决方案中。卸载项目并编辑项目文件。
将 OutputType 更改为模块:
<OutputType>module</OutputType>
我们没有添加对所需项目的引用,而是添加了一个模块。可悲的是,VStudio 在这里再次失败,但 MSBUILD 工作得很好。卸载项目并编辑项目文件。使用 AddModules 包含指令添加项目组。
<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>
这将告诉 msbuild 告诉 CSC 使用 /addmodule 指令,就像 Studio 管理的参考项目组一样。
主要缺点:添加的模块没有 Visual Studio Intellisense。我们已经有了引用,可惜我们没有模块。 [更新:正如@Ark-kun 在别处指出的那样,Visual Studio 可以引用 .netmodule 项目并拥有 Intellisense。只需在更改输出类型之前添加项目引用。]
SharpDevelop 有第一步,但第二步,“添加模块”gui 自 SD 2.0 以来已作为低优先级项目打开。
第二种方式。great article(由 Scott Hanselman 撰写)描述了如何在使用 Visual Studio 时自动运行程序集。它确实为您提供 IntelliSense 支持,这与第一个替代方案不同。
第三种方式。使用 scs 手动完成。
示例如何创建多个模块并将主题链接到单个 dll:
csc /t:module RarelyUsedTypes.cs
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs
有关更多信息,请参阅 Richter 的书CLR via C#。