【问题标题】:MSBuild on Server errorCS0234 errors .net 4.7.2MSBuild on Server errorCS0234 错误.net 4.7.2
【发布时间】:2020-01-03 02:12:23
【问题描述】:

我正在尝试在我们的 tfs 服务器上构建一个新的解决方案,我遇到了很多错误,这里有几个例子:

App_Start\BundleConfig.cs (1,18): errorCS0234: 类型或命名空间 名称空间“System.Web”中不存在名称“优化”(是 您缺少程序集参考?) App_Start\FilterConfig.cs (1,18): errorCS0234:类型或命名空间名称“Mvc”不存在于 命名空间“System.Web”(您是否缺少程序集引用?) App_Start\RouteConfig.cs (1,18): errorCS0234: 类型或命名空间 名称空间“System.Web”中不存在名称“Mvc”(您是 缺少程序集参考?) App_Start\WebApiConfig.cs (1,7): errorCS0246: 类型或命名空间名称“Newtonsoft”不能是 找到(您是否缺少 using 指令或程序集引用?) App_Start\WebApiConfig.cs (2,18): errorCS0234: 类型或命名空间 名称空间“System.Web”中不存在名称“Http”(您是 缺少程序集引用?)

为了解决问题,我使用的是 MSBuild:C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe

解决方案设置为在 .net 4.7.2 中编译。

如果我在本地运行 MSBuild 命令行,它构建得很好,如果失败并出现上述错误,则在服务器上构建。我不确定我错过了什么。它还在本地的 Visual Studio 2019 中构建良好。

我检查了我的引用,这些引用是任何 nuget 包的一部分,它们指向包位置中的 dll。即

C:\somepath\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll

这是我的 nuget 设置:

有什么想法吗?

编辑:我添加了 build.proj 文件来恢复 nuget 包:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
         DefaultTargets="Build"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <OutDir Condition=" '$(OutDir)'=='' ">$(MSBuildThisFileDirectory)bin\</OutDir>
    <Configuration Condition=" '$(Configuration)'=='' ">Release</Configuration>
    <SourceHome Condition=" '$(SourceHome)'=='' ">$(MSBuildThisFileDirectory)src\</SourceHome>
    <ToolsHome Condition=" '$(ToolsHome)'=='' ">$(MSBuildThisFileDirectory)tools\</ToolsHome>
  </PropertyGroup>
  <ItemGroup>
    <Solution Include="DCOAPI.sln">
      <AdditionalProperties>OutDir=$(OutDir);Configuration=$(Configuration)</AdditionalProperties>
    </Solution>
  </ItemGroup>
  <Target Name="RestorePackages">
    <Exec Command="&quot;NuGet.exe&quot; restore &quot;%(Solution.Identity)&quot;" />
  </Target>
  <Target Name="Clean">
    <MSBuild Targets="Clean"
             Projects="@(Solution)" />
  </Target>
  <Target Name="Build" DependsOnTargets="RestorePackages">
    <MSBuild Targets="Build"
             Projects="@(Solution)" />
  </Target>
  <Target Name="Rebuild" DependsOnTargets="RestorePackages">
    <MSBuild Targets="Rebuild"
             Projects="@(Solution)" />
  </Target>
</Project>

我收到这条消息:

packages.config 中列出的所有包都已安装。

当通过 MSBuild 构建和我的两个项目构建时,但 web api v2 proj 没有构建,我得到了上面的所有错误。

这些是相关的包:

<packages>
      <package id="Antlr" version="3.5.0.2" targetFramework="net472" />
      <package id="bootstrap" version="3.4.1" targetFramework="net472" />
      <package id="jQuery" version="3.3.1" targetFramework="net472" />
      <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net472" />
      <package id="Microsoft.AspNet.WebApi" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.WebApi.Client" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.WebApi.Core" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.7" targetFramework="net472" />
      <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net472" />
      <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net472" />
      <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net472" />
      <package id="Modernizr" version="2.8.3" targetFramework="net472" />
      <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net472" />
      <package id="WebGrease" version="1.6.0" targetFramework="net472" />
    </packages>

我添加到服务器的唯一内容是 VS2019 基本框架:

我还需要安装其他东西吗?

【问题讨论】:

  • 您的构建过程是否包括恢复 nuget 包的步骤?
  • @JonathonChase 不是你的意思是像预构建事件吗?如果不是预构建事件,我将在哪里查看?我用我的 nuget 设置更新了问题
  • This document 可能会有所帮助。它显示了如何修改项目以添加 MSBuild 的还原步骤。您可能会复制服务器上发生的事情,方法是在本地删除您的 packages 文件夹,然后尝试从命令行进行 MSBuild。
  • 另外,这个问题可能会有所帮助:stackoverflow.com/questions/33565296/…
  • @JonathonChase 感谢您提供信息,在创建 build.proj 和其他部分后,这似乎不是问题,当我通过 MSBuild 命令行在服务器上构建时仍然遇到相同的错误.

标签: c# .net msbuild visual-studio-2019 .net-4.7.2


【解决方案1】:

1.您可以尝试删除这些软件包,然后重新安装它们。类似问题参见here。 (删除包重装可以避免All packages listed in packages.config are already installed.这样的情况)

2.正如你上面提到的,它是一个 web api v2 项目。我创建了一个并发现它应该并且会自动添加对Newtonsoft.Json 包的引用,但您的packages.config 似乎不包含此引用。您是否修改了 packages.config 文件?

也许你应该参考 Newtonsoft.Json 包来解决错误The type or namespace name 'Newtonsoft' could not be found。对于 packages.config 格式,你应该同时使用 packages.config 和 xx.csproj 文件,所以我建议你在 VS IDE 中使用Nuget 管理器用户界面。

3.另外,如果软件包安装成功但仍然出现错误。您可能需要检查 xx.csproj 文件中的内容,该文件会引发 CS0234 错误消息。检查他们的提示路径是否正确。

对于 msbuild 的配置,您需要确保您的服务器使用的 VS 已经安装了 asp.net 和 web 开发工作负载。

【讨论】:

  • @LanceLiMSFT 我更新了我的包列表 newtonsoft 在那里。我添加了 ASP.Net 和 web 开发。还是一样的错误。我也收到 errorCS0246 错误。我不想列出所有错误,因为它们都很相似,共有 149 个。
  • @lancelimsft 我也检查了提示路径看起来都不错。我将通过 VS 或通过 MSBuild 在本地构建查找。我之前删除了所有软件包,然后通过 nuget 进行了恢复。服务器是Server 2012。
  • @Popo 根据您的回答,您的 nuget.exe 太旧了,可能会导致有关 newtonsoft 的问题?我现在很好奇您问题中的somepath 是什么意思。是指C:\...\SolutionDir\packages吗?
  • 它是解决方案目录的路径,但有个人信息,所以我只是将其设为别名。
【解决方案2】:

我必须将我使用的 Nuget.exe 从 2.8.6 更新到最新的 5.1,这样它才能构建 newtonsoft dll。

然后我不得不手动将包从本地复制到服务器(不知道为什么它们没有自动添加):

C:\Program Files (x86)\Microsoft SDKs\NuGetPackages

另外,正如 LanceLiMSFT 所述,我必须更新 VS 以包含 asp.net 和 Web 开发工作负载。

毕竟,我能够使用 MSBuild 通过命令行构建解决方案。

我仍然无法让 CCNet 构建解决方案。

编辑: 我可能需要在 CCNet 配置中添加一个步骤以在构建之前删除包文件夹。无论出于何种原因,在通过 MSBuild 构建时,这似乎是关键

编辑:同样根据 LanceLiMSFT 的建议,删除构建服务器上的包允许 MSBuild 命令工作。

编辑:能够通过更新 build.proj 文件来构建 CCNet:

  <Target Name="RemoveDirectories">
    <Delete Files="C:\pathtopackages\packages\**\*" />
    <RemoveDir Directories="C:\pathtopackages\packages\" />
  </Target>

  <Target Name="RestorePackages" DependsOnTargets="RemoveDirectories">
    <Exec Command="&quot;NuGet.exe&quot; restore &quot;%(Solution.Identity)&quot;" />
  </Target>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 2011-07-15
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多