Ele*_*ios 5 .net c# vb.net msbuild visual-studio
我有这些构建配置:
这些平台配置:
而这些编译条件:
NET40
NET45
Run Code Online (Sandbox Code Playgroud)
我的解决方案是一个庞大的API,包含20个解决方案,其中一些解决方案Async使用了只能从.NetFx 4.5获得的关键字和其他优势.
这部分代码我以这种方式在条件中:
#If NET45 then
Sub Async
...
End Sub
#Else
Sub
...
End Sub
#End If
Run Code Online (Sandbox Code Playgroud)
然后,我想要做的是清楚,.NetFx 4.5构建配置应该编译NET45条件的块,而.NetFx 4.0构建配置应该编译#Else部分的块.
我发现的问题是,如果我在项目设置中更改应用程序目标框架,则更改将在所有其他构建配置中保留,并且我希望避免持久性.
那我该怎么做呢?
注意:
我用C#标记标记了这个问题,因为它是一个一般的Visual Studio环境问题,但我会澄清我的解决方案是用Vb.Net编写的,因为我知道C#项目设置和它们的编译器参数之间有一些很大的区别所以也许C#高级答案无法帮助我.
我的建议是通过移动部分文件中的平台/目标/等敏感代码来摆脱代码中的条件语句。然后我会转到项目文件,并使用 ms-build 提供的所有功能使包含的文件在特定条件下敏感
例子:
在 GenericClass.vb 中
Partial Public Class GenericClass
Public Sub Hello()
Console.Write("Hello ")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在 ClassDotNetFeatures40.vb 中
Partial Public Class GenericClass
Public Sub Word()
Console.Write("4.0 Word!")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在
类DotNetFeatures45.vb
Public Class GenericClass
Public Sub Word()
Console.Write("4.5 Word!")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
将以下代码放入Module1.vb中
Sub Main()
Dim o = New GenericClass()
o.Hello()
o.Word()
End Sub
Run Code Online (Sandbox Code Playgroud)保存全部
Run Code Online (Sandbox Code Playgroud)<Compile Include="ClassDotNetFeatures40.vb" /> <Compile Include="ClassDotNetFeatures45.vb" />
并将它们替换为
<Compile Condition="'$(Configuration)' == 'Debug'" Include="ClassDotNetFeatures40.vb" />
<Compile Condition="'$(Configuration)' == 'Release'" Include="ClassDotNetFeatures45.vb" />
Run Code Online (Sandbox Code Playgroud)
现在,当您运行项目撤消调试时,您将得到:
你好4.0字!
撤消释放你将得到:
你好4.5字!
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |