代码之家  ›  专栏  ›  技术社区  ›  Brett Rigby

将VB.NET 2008项目升级到VS2010时出现问题

  •  20
  • Brett Rigby  · 技术社区  · 15 年前

    我已经将几个不同的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版本中,增加了4235342235442355值;在IDE中,这在项目属性编译部分中显示为以下设置:

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

    在Visual Studio 2010中生成代码时,这不是问题,但在尝试通过连续集成脚本生成代码时,它会失败,并出现以下错误:

    [msbuild]vbc:命令行错误 BC2026:警告编号“42353” 选项“nowarn”不是 可配置或无效

    [msbuild]vbc:命令行错误 BC2026:警告编号“42354” 选项“nowarn”不是 可配置或无效

    [msbuild]vbc:命令行错误 BC2026:警告编号“42355” 选项“nowarn”不是 可配置或无效

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

    对于为什么Visual Studio 2010的转换向导要执行此操作有何建议?

    9 回复  |  直到 12 年前
        1
  •  24
  •   Paolo    15 年前

    是否已将生成脚本更改为使用msbuild的4.0版本?在我看来,你还没有,而msbuild抱怨它对警告42353等一无所知(如果在4.0中引入这些警告,这是有意义的)。

        2
  •  1
  •   Hans Passant    15 年前

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

        3
  •  0
  •   Pera    15 年前

    只需编辑*.vbproj项目文件并删除所有4235342235442355,这就可以解决构建问题。

        4
  •  0
  •   Kevin Flanagan    15 年前

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

        5
  •  0
  •   Adam    14 年前

    说“使用.NET版本4”的答案是对的和错的,IMO。它允许您构建项目,但它不应该是必需的。在我的例子中,我不想使用.NET 4 msbuild,因为它是一个Web项目(ASP MVC),需要部署到没有安装.NET 4的服务器上。这就是为什么我在从VS2008转换为VS2010时回答了“否”到“是否要升级到.NET 4”的问题。在我看来,这是转换向导中的一个错误,因为我说过要将其保留为.NET 3.5,但我无法使用.NET 3.5生成最终的项目。

    如果我从项目文件中删除这些警告,我可以,但是是否有人能向我解释这些警告代码的实际含义?我有点惊讶,我在某个地方找不到警告代码和解释的列表。“‘函数返回不带返回值的内在值类型’=none’解释——这是针对所有3个警告代码8的一起还是单独的?”或者只是为了其中一个?不太明白为什么有3个代码,如果它们有1个含义…

        6
  •  0
  •   Adam    14 年前

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

    请注意,这与编辑vbproj文件具有相同的效果,因为它会从vbproj文件的节中删除这些警告号。我想它也可能改变一些其他的警告号码。不管怎样,我可以接受更多的警告(不管怎样,我并没有收到任何警告,但是我可能会收到关于这一点的警告,而不是被忽略的警告,这不是一个问题,从我的角度来看),并且项目现在使用我们以前一直使用的3.5版本的msbuild来构建和工作。我认为这可能是升级向导中的一个错误,并且已经通过MS Connect报告了它。

        7
  •  0
  •   Brett Rigby    12 年前

    找到解决方法 this Microsoft Connect page:

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

    现在一切似乎都正常了。

        8
  •  0
  •   foxontherock    12 年前

    只需移除nowarn,它就可以工作了。

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

    升级后,我们只需要在nowarn部分中删除这3个数字,就可以在服务器上编译项目,因为服务器上没有安装框架4.0+,并且使用msbuild 3.5,一切工作正常。

        9
  •  0
  •   howserss    12 年前

    这是我的解决方案。我的解决方案以.NET 2.0为目标,但从VS2010开始。NET-4.0告诉nant使用.NET 4安装中的msbuild。如果您的项目文件中设置了2.0或3.5输出,那么它仍然构建该输出。如下文所述,在“项目属性构建”部分将“无”设置为“警告”也会有所帮助。-)

    属性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>