【发布时间】:2013-07-25 13:56:27
【问题描述】:
我需要为 3.5 和 4.0 .NET 应用程序提供一个组件。以下是事实:
- 3.5 和 4.0 .NET 应用程序都使用组件
- 组件作为 Nuget 包分发
- 组件依赖于 System.Threading.dll(面向 3.5 时,引用了 backport;面向 4.0 时,间接引用了框架程序集)
我能想到几种方法:
- 仅和 ILMerge (/internalize) System.Threading.dll 针对 3.5 构建
- 针对 3.5 和 4.0 构建:为 3.5 和 4.0 构建配置创建单独的 .csproj 文件。 Nuget 包将包含两组程序集。
- 针对 3.5 和 4.0 构建:重用 .csproj 文件并创建新的项目配置以通过向 .csproj 文件添加条件任务来针对 3.5 和 4.0 构建。 Nuget 包将包含两组程序集。
选项 2 和 3 只是在生成程序集的方式上有所不同,因为分布相同。我过去曾使用过一次选项 3,但效果不太好,因为它不能很好地与 Visual Studio 项目编辑器配合使用。
我想知道我所描述的场景是否有最佳实践或每种方法的优缺点。
版主注意事项:我知道这是一个有点主观的问题,请随时对其进行编辑以使其更客观。但是,请不要锁定/删除它,因为我确实需要就此获得建议。
【问题讨论】:
-
这听起来很不健康。不允许您自己引用 System.Threading.dll。它是一个不包含任何代码的垫片程序集。只需 [TypeForwardedTo] 属性即可将类型移动到另一个程序集。您的计划可能会给客户程序员带来很多难以诊断的问题。
-
我澄清了。 .NET 4.0 不直接引用 System.Threading.dll。 .NET 3.5 引用了反向端口(与 Rx 相同的东西)。