.NET构建使用Jenkins MSBuild错误"不允许使用默认参数说明符"

时间:2014-08-05 18:45:49

标签: c# jenkins msbuild .net-3.5 default-parameters

我正在尝试构建一个.NET项目,我不知道它如何通过Jenkins.Anyhow中的MSbuild插件工作,这是针对框架3.5以及我在构建服务器中使用的内容。当我构建时,我得到以下错误,不知道如何解决..

 "c:\jenkins\workspace\Master.sln" (default target) (1) ->
"c:\jenkins\workspace\FactivaWebUI01-Fornax\UIVirtualServices\UIVirtualServices.csproj" (default target) (16) ->
(CoreCompile target) -> 
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(36,78): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(66,33): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(67,29): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(68,29): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(69,28): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(70,43): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(71,41): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(72,37): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(73,56): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\CommunicatorAuthorService.cs(156,85): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(32,33): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(33,29): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(34,29): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(35,28): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(36,43): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(37,41): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(38,37): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Authors\ICommunicatorAuthorService.cs(39,56): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Charts\CommunicatorChartService.cs(54,68): error CS0241: Default parameter specifiers are not permitted
  CSP\Communicator\Charts\CommunicatorChartService.cs(54,109): error CS0241: Default parameter specifiers are not permitted

    184 Warning(s)
    20 Error(s)
有趣的是,当我使用visual studio 2013构建同一个项目时,它构建得非常好。

csproj文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
        <WebProjectProperties>
          <StartPageUrl>
          </StartPageUrl>
          <StartAction>CurrentPage</StartAction>
          <AspNetDebugging>True</AspNetDebugging>
          <SilverlightDebugging>False</SilverlightDebugging>
          <NativeDebugging>False</NativeDebugging>
          <SQLDebugging>False</SQLDebugging>
          <ExternalProgram>
          </ExternalProgram>
          <StartExternalURL>
          </StartExternalURL>
          <StartCmdLineArguments>
          </StartCmdLineArguments>
          <StartWorkingDirectory>
          </StartWorkingDirectory>
          <EnableENC>False</EnableENC>
          <AlwaysStartWebServerOnDebug>True</AlwaysStartWebServerOnDebug>
        </WebProjectProperties>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>

根据建议,我尝试使用MsBuild 4.0构建它只是为了收到以下错误:

(GenerateSerializationAssembliesForAllTypes target) -> 
  SGEN : error : An attempt was made to load an assembly with an incorrect format: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll. [c:\jenkins\workspace\FactivaWebUI01-Fornax\MessageModel\MessageModel.csproj]

    129 Warning(s)
    1 Error(s)

1 个答案:

答案 0 :(得分:2)

我非常怀疑您的.NET项目实际上并不是针对.NET Framework 3.5中包含的C#版本,而是针对.NET Framework 4中包含的C#4.0。请参阅this question和{{ 3}},例如,讨论相同的错误。关于this question有一个很好的答案。

您能否提供.NET项目的.csproj项目文件中的框架定位信息以进行验证?它是一个XML文件,您应该在顶部附近找到目标框架信息,例如:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <!-- Some elements omitted -->
    <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>

更新:感谢您提供.csproj个文件。这有点帮助。请注意,在该文件中,目标.NET Framework版本为3.5(<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>)。现在,因为你的项目中有C#4.0代码(例如你收到警告的默认参数),你必须使用C#4.0编译器 将目标框架版本更新为4.0 (或更高版本)。您可以通过Visual Studio中的项目属性最安全地执行此操作。我不建议手动编辑.csproj文件。

简而言之,您的问题是由于使用MSBuild 4.0不足以针对4.0框架编译项目。它可能使用较新的编译器,它负责一些(但是不是全部!)语言功能,但它不会更新项目使用的程序集。