在Visual Studio中更改构建配置时更改应用程序目标框架

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#高级答案无法帮助我.

Yau*_*sau 2

我的建议是通过移动部分文件中的平台/目标/等敏感代码来摆脱代码中的条件语句。然后我会转到项目文件,并使用 ms-build 提供的所有功能使包含的文件在特定条件下敏感

例子:

  • 在 Visual Studio 中创建全新的 VB 控制台应用程序
  • 添加三个类文件ClassDotNetFeatures40.vb、ClassDotNetFeatures45.vb、GenericClass.vb
  • 添加以下代码

在 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)
  • 保存全部

  • 右键单击您的解决方案并按“卸载项目”
  • 右键单击项目文件并按编辑项目
  • 找到以下几行:
<Compile Include="ClassDotNetFeatures40.vb" />
<Compile Include="ClassDotNetFeatures45.vb" />
Run Code Online (Sandbox Code Playgroud)

并将它们替换为

<Compile Condition="'$(Configuration)' == 'Debug'" Include="ClassDotNetFeatures40.vb" />
<Compile Condition="'$(Configuration)' == 'Release'" Include="ClassDotNetFeatures45.vb" />
Run Code Online (Sandbox Code Playgroud)
  • 按保存
  • 右键单击项目文件并按重新加载

现在,当您运行项目撤消调试时,您将得到:

你好4.0字!

撤消释放你将得到:

你好4.5字!