4

所以,我想把我的开发团队升级到VS2008。作为一家企业,我们还没有推出 3.5 运行时。

从一些阅读来看,安装 VS2008 似乎会自动为您提供 .net 2.0 SP1,它具有一些新的 API,并且当您以 2.0 运行时为目标时,它将假定为 2.0 SP1。

但如果 SP1 没有向我们的用户推出,这将导致运行时中断。

  1. 反正有没有VS目标dotnet 2.0(不是SP1)?
  2. 是否有任何其他解决方案可以解决此问题,以便开发人员不使用在本地编译和运行良好但在生产中崩溃的 API?

我看到 fxcop 对此进行了检查,但必须有一个更简单的解决方案来解决这个问题。

4

2 回答 2

1

这可能是困难的或容易的。我们走了两条路:

  1. 简单的方法:建立一个只安装了 .Net 2.0 的构建服务器。自动构建以在签入时运行(我们使用 CruiseControl.Net)。您必须使用命令提示符中的 MSBuild 来构建项目。

  2. 对于安装了 3.5 的机器,即使您从 .Net 2.0 框架目录运行 MSBuild,也会替换许多 MSBuild 工具。为避免这种情况,您必须创建一个强制仅继续使用 .Net 2.0 运行时的应用程序。这并不容易。我们直接加载项目并使用 Microsoft.Build.* 框架调用构建。仅此一项还不够。您必须在 .config 文件中固定要使用的程序集:

    <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a"culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a"culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/> </dependentAssembly> ... ect ... </assemblyBinding> </runtime> </configuration>

顺便说一句,您可能还对在 VS2008 中新创建的项目有问题,需要定义一个名为“MSBuildToolsPath”的属性。如果使用 MSBuild,您可以在命令行上定义它,或者如果使用第二个选项,则以编程方式指定它:

engine.GlobalProperties.SetProperty( "MSBuildToolsPath", msbuildPath );
于 2009-08-31T19:39:40.563 回答
0

或许supportedRuntime 配置元素值得一看。但我不确定这是否有帮助。

于 2009-08-31T20:23:21.317 回答