如何让 VS2008 的开发人员以 .net 2.0(而不是服务包)为目标来避免运行时崩溃?

StackOverflow https://stackoverflow.com/questions/1357472

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

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

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

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

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

有帮助吗?

解决方案

这可能很困难,也可能很容易。我们走了两条路:

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

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

    u003Cconfiguration>u003Cruntime>u003CassemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">u003CdependentAssembly>u003CassemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>u003CbindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/>u003C/dependentAssembly>u003CdependentAssembly>u003CassemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>u003CbindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="2.0.0.0"/>u003C/dependentAssembly> ...等等...u003C/assemblyBinding>n u003C/runtime>nu003C/configuration>

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

engine.GlobalProperties.SetProperty( "MSBuildToolsPath", msbuildPath );

其他提示

也许是 支持的运行时配置元素 值得一看。但我不确定这是否有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top