【问题标题】:Project layout for small, shared C# classes [closed]小型共享 C# 类的项目布局 [关闭]
【发布时间】:2020-12-25 16:35:33
【问题描述】:

我正在为 .Net 框架应用程序编写插件(即具有特殊入口点的 .Net 4 库),但我也想将功能公开为独立的 CLI 可执行文件。

当前目录布局如下:

Directory.build.props // shared configuration, e.g. author name, project name
FooPlugin/FooPlugin.cs
Foo/FooPlugin/FooPlugin.csproj
Foo/FooLib/FooLib.cs
Foo/FooLib/FooLib.csproj
Foo/FooExe/FooExe.cs
Foo/FooExe/FooExe.csproj
Bar/BarPlugin/…

FooLib 是一个 .Net Standard 2.0 库,具有 FooLib.cs 中的全部功能,FooPlugin 是一个 .Net 4.8 库,带有插件的入口点 FooPlugin.csFooExe 是一个 .Net Core在FooExe.cs 中使用FooLib 的CLI 包装器可执行。到目前为止,一切顺利。

这种方法有两个主要问题:

  1. FooPlugin 依赖于几个特定于应用程序的仅限 Windows 的程序集,所以我不能只从根目录中 dotnet build,因为 msbuild 也尝试构建 FooPlugin,我还没有弄清楚如何有条件地排除解决方案文件中的子项目。

  2. 每个插件(和 CLI 应用程序)都有两个文件(FooPlugin.dllFooLib.dll / FooExe.dllFooLib.dll) which in itself isn't that bad, but my users ignore FooLib.dlland then complain.ILMerge` 看起来很有希望,但它的配置是比整个剩余的构建配置加起来要复杂得多。

在 CMake 中,我只会写

add_library(FooLib STATIC FooLib.cpp)
add_library(FooPlugin SHARED FooPlugin.cpp)
target_link_libraries(FooPlugin PRIVATE FooLib)
add_executable(FooExe SHARED FooExe.cpp)
target_link_libraries(FooExe PRIVATE FooLib)

并将FooLib 合并到FooPlugin.dllFooExe.exe

我已经考虑过将FooLib 中的(少数)源文件的符号链接放入FooPluginFooExe,但是Windows 上对符号链接的支持还不是很好。

我可以在 msbuild 中定义目标以自动合并到程序集中吗?

【问题讨论】:

    标签: c# .net msbuild


    【解决方案1】:

    一个相当简单的解决方案是创建多个解决方案文件,每个文件都包含一些项目。

    对于更有效的解决方案,我会查看 CakeFake。我都没有使用过,但它们似乎是 .net 平台上最流行的构建系统。

    您也可以使用 msBuild 的目标开关切换到build a specific project in a solution

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 2018-05-27
      • 2022-12-05
      • 2012-05-26
      相关资源
      最近更新 更多