将VB.Net 2008项目升级到VS2010的问题

时间:2010-05-10 15:00:30

标签: visual-studio-2010 continuous-integration nant

我一直在将几个不同的VS2008项目升级到VS2010,并且在转换后发现了VB.Net项目的问题。

转换后,.vbproj文件在VS2008中已更改:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   <DebugSymbols>true</DebugSymbols>
   <DebugType>full</DebugType>
   <DefineDebug>true</DefineDebug>
   <DefineTrace>true</DefineTrace>
   <OutputPath>bin\Debug\</OutputPath>
   <DocumentationFile>CustomerManager.xml</DocumentationFile>
   <WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
</PropertyGroup>

VS2010:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   <DebugSymbols>true</DebugSymbols>
   <DebugType>full</DebugType>
   <DefineDebug>true</DefineDebug>
   <DefineTrace>true</DefineTrace>
   <OutputPath>bin\Debug\</OutputPath>
   <DocumentationFile>CustomerManager.xml</DocumentationFile>
   <NoWarn>42353,42354,42355</NoWarn>
   <WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
</PropertyGroup>

主要区别在于VS2010版本中添加了42353,42354,42355的值;在IDE内部,它在Project Properties中显示为以下设置将部分编译为:

“返回没有返回值的内在值类型的函数”=无

在Visual Studio 2010中构建代码时,这不是问题,但是当尝试通过我们的持续集成脚本构建代码时,它会因以下错误而失败:

  

[msbuild] vbc:命令行错误   BC2026:警告号码'42353'表示   选项'nowarn'要不是   可配置或无效

     

[msbuild] vbc:命令行错误   BC2026:警告号码'42354'表示   选项'nowarn'要不是   可配置或无效

     

[msbuild] vbc:命令行错误   BC2026:警告号码'42355'表示   选项'nowarn'要不是   可配置或无效

我在Google上找不到任何关于这些消息的内容,这很奇怪,因为我试图找出为什么会发生这种情况。

有关Visual Studio 2010转换向导为何会这样做的任何建议吗?

9 个答案:

答案 0 :(得分:24)

您是否更改了构建脚本以使用4.0版本的MSBuild?看起来像你没有和MSBuild抱怨它对警告42353等一无所知(如果它们是在4.0中引入的话会有意义)

答案 1 :(得分:1)

我在转换的项目上重复此行为。无法找到有关这些警告号码含义的任何文档,MSDN库尚未更新。不过,我的编译器对它们没有任何问题。您的问题几乎肯定是由您的构建服务器或使用旧版本的vbc.exe的脚本引起的。确保c:\ windows \ microsoft.net \ framework \ v4.0.30319中的代码编译代码。

答案 2 :(得分:0)

只需编辑* .vbproj项目文件并删除所有出现的42353,42354,42355,这应该可以解决构建问题。

答案 3 :(得分:0)

你认为攻击.vbproj文件并不是真正的解决方案是完全正确的。您需要编辑TFS构建服务的.config以使用4.0版本的MSBuild,如http://blogs.msdn.com/b/willbar/archive/2009/11/01/building-net-4-0-applications-using-team-build-2008.aspx所述。注意:服务需要重新启动才能使更改生效,并且您需要使用正确的.NET 4.0框架目录(博客指定测试版)

答案 4 :(得分:0)

说“使用.net版本4”的答案都是对与错,imo。它允许您构建项目,但它不是必需的。在我的情况下,我不想使用.net 4 msbuild,因为它是一个web项目(asp mvc),需要部署到没有安装.net 4的服务器上。这就是为什么我在从VS2008转换到VS2010时对“你想要升级到.net 4”的问题回答“否”。在我看来,这是转换向导中的一个错误,因为我说它保留为.net 3.5,但我无法使用.net 3.5构建生成的项目。

如果我从项目文件中删除这些警告,但我可以向任何人指出这些警告代码实际含义的解释吗?我有点惊讶我找不到某个警告代码和解释的清单。 '“函数返回内部值类型没有返回值”=无'解释 - 是所有3个警告代码共8个或单独的)?或者仅为他们中的一个?不太明白为什么有3个代码,如果它们有1个含义......

答案 5 :(得分:0)

我现在进一步调查了一下。请注意,我没有使用TFS - 我们使用subversion进行版本管理,并使用我们自己的构建/部署脚本,它们只是从命令行调用msbuild - 而且它就是我的失败。但是,如果我在升级版本中打开项目属性,请转到“编译”选项卡并将“无返回值的函数返回内部值类型”选项从“无”更改为“警告”,然后我可以再次构建项目。

请注意,这与编辑vbproj文件具有相同的效果,因为它会从vbproj文件的部分中删除这些警告编号。我认为它也可能改变其他几个警告号码。无论如何,我可以接受更多的警告(不是我得到任何警告,但可能会被警告,而不是警告被忽略不会是一个问题,我看待它的方式)和项目建设和工作现在,使用我们以前一直使用的3.5版本的msbuild。我认为它可能是升级向导中的一个错误,并且也通过MS Connect报告了它。

答案 6 :(得分:0)

this Microsoft Connect page:

上找到解决方法

升级后,将项目属性的编译选项卡上的警告配置下的“返回内部值类型无返回值”选项从“无”更改为“警告”

现在一切似乎都有效。

答案 7 :(得分:0)

只需删除它即可使用。

实际上,我们正在开发基于Visual Studio 2008的框架3.5 api,有些人在这里工作于2012年,其他人在2008年,在同一个vbproj上(2个解决方案文件,1个用于2008,1个用于2012)。

我们只需要在升级后删除nowarn部分中的这3个数字,以便在我们的服务器上编译我们的项目,其中没有安装framework 4.0+,并且一切正常,使用msbuild 3.5。

答案 8 :(得分:0)

这是我的解决方案。我的解决方案的目标是.net 2.0,但是来自VS2010。 net-4.0告诉NAnt使用.net 4安装的MSBuild。如果在项目文件中设置了什么,它仍会构建2.0或3.5输出。在项目属性构建部分中将“none”设置为“warning”也有帮助,如下面进一步提到的。 : - )

property name =“nant.settings.currentframework”value =“ net-4.0

    <msbuild project="..\Test.sln" verbosity="Normal">
        <property name="Configuration" value="${Build.Configuration}" />
        <property name="OutDir" value="${Build.OutputFolder}\Test\\" />
        <arg value="/t:Rebuild" />
    </msbuild>