我一直在将几个不同的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转换向导为何会这样做的任何建议吗?
答案 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)
答案 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”也有帮助,如下面进一步提到的。 : - )
<msbuild project="..\Test.sln" verbosity="Normal">
<property name="Configuration" value="${Build.Configuration}" />
<property name="OutDir" value="${Build.OutputFolder}\Test\\" />
<arg value="/t:Rebuild" />
</msbuild>