Dav*_*err 47 .net c# visual-studio-2012
我正在构建一个类库,我将部署一个NuGet包,它允许我根据它添加到的项目的.NET框架版本选择要添加的不同程序集作为引用.这是一个非常好的功能,但我想知道的是,是否有可能拥有一个类库项目,并针对.NET框架的多个版本构建它?
我宁愿避免:
MyLibrary40.dll 和 MyLibrary45.dll
如果可能的话,因为这两个项目必须分享很多代码.4.5版本将提供async4.5功能的功能.
有谁知道最好的办法是什么?我可以使用多个构建配置吗?或者我必须沿着单独的项目路线走?
如果我在C++中工作,我可能会使用多个配置并#if围绕仅在一个配置中支持的功能,但我担心这会导致我有两个具有相同名称的程序集执行不同的操作.
提前致谢!
Jeh*_*hof 37
您将至少需要一个包含2个项目的VisualStudio解决方案(一个用于.net 4,另一个用于.net 4.5).
将所有代码文件添加到.net 4项目中,在另一个项目中添加代码文件作为链接(使用"Add Existing Item..."-Dialog并选择Add as link)
现在,将.NET 4.5的所有代码和类添加到4.5项目中.
另外,您应该为项目定义自己的编译器开关(条件编译符号).像.NET4一样用于.net 4项目,NET4.5用于.net 4.5项目
您可以在Build-> General-> Conditional Compilation Switches下的项目设置中设置开关
在您的代码中,您可以使用以下开关生成.NET 4或.NET 4.5的代码
#if NET4
// code only for .NET 4
#endif
// code for all framework versions.
#if NET45
// code only for .NET 4.5
#endif
Run Code Online (Sandbox Code Playgroud)
Dre*_*kes 15
一种简单的方法是.csproj在同一文件夹中添加另一个文件,并将其配置为构建不同的框架版本.这避免了必须添加文件的链接,因为两个项目本质上是对同一文件夹结构的视图.
说你有结构:
- MyLibrary\
- MyLibrary.sln
- MyLibrary\
- MyLibrary.csproj
- Program.cs
Run Code Online (Sandbox Code Playgroud)
复制MyLibrary.csproj到同一文件夹并编辑以更改一些内容:
<ProjectGuid> 只需为此元素的值创建一个新的GUID<TargetFrameworkVersion>在此指定替代版本,例如:v4.5或v3.5<OutputPath>(对于Debug和Release)将其设置为一个唯一的路径,例如bin\Debug\net45和bin\Debug\net45,以允许每个项目的输出结束在一个唯一的位置您还必须向非条件<PropertyGroup>元素添加新元素,以便obj在并行构建期间两个项目不会在文件夹中发生冲突.这很重要,可以防止奇怪的竞争条件错误.
<PropertyGroup>
<BaseIntermediateOutputPath>obj\net45\</BaseIntermediateOutputPath>
Run Code Online (Sandbox Code Playgroud)
最后,将此新项目添加到现有解决方案中.
这种方法与定义编译开关(例如NET35和NET45,以及使用#if NET35/ #endif指令)密切配合.
使用此技术的两个开源项目是MetadataExtractor和NetMQ.如果您遇到麻烦,可以参考它们.
| 归档时间: |
|
| 查看次数: |
15510 次 |
| 最近记录: |