【问题标题】:Visual Studio builds debug configuration, but not release configurationVisual Studio 构建调试配置,但不构建发布配置
【发布时间】:2014-03-21 11:05:36
【问题描述】:

这个特殊的问题是一个大问题。

在我当前的配置中,Visual Studio 2013 构建我的项目 if 它在 Debug 配置中,但不是 if 它在 发布配置。

不知何故,当我选择 Release 时,出现 160 个错误,当我检查它们时,它们出现在不可能的地方。这是一个例子。

Visual Studios 错误如下:

错误 3 ;预期 E:\Users\Robert\Documents\Visual Studio 2013\Projects\GW2.NET\GW2.NET\GW2.NET\V1\MapInformation\DataProvider\ContinentData.cs 96 36 GW2.NET

这里是有问题的代码:

public static async Task<T> GetContentAsync<T>(string apiMethod, List<KeyValuePair<string, object>> arguments, Categories category)
    {
        var response = await GetJsonAsync(apiMethod, arguments, category);

        return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<T>(response));
    }

你看没有任何错误。如果有,调试配置也不会构建。我已经尝试清理解决方案并从 TFS 获取最新的解决方案,然后我删除并重新创建了配置。

现在我已经无计可施了。我该如何解决这个问题?

该项目是一个 C# 4.0 项目,包含 Microsoft async、JSON.NET 和 Rest# 包。

【问题讨论】:

    标签: visual-studio c#-4.0 tfs visual-studio-2013


    【解决方案1】:

    如果您真的卡住了,您可以做的一件事是在文本或 XML 编辑器中打开 .csproj 文件并检查其中的实际 XML 内容。您正在尝试根据调试/发布配置确定哪些设置/属性设置不同。这可能会让您对两种配置之间的不同之处有所了解。

    【讨论】:

      【解决方案2】:

      好的,如果其他人有同样的问题,这就是我所做的。感谢Dylan Smith,我找到了解决方案。

      使用您选择的文本编辑器打开您的 .csproj 文件。我使用了Notepad++,但 Visual Studio 也在工作。在顶部应该有称为 PropertyGroup 的元素。这些元素定义了您的构建配置。对我来说有两个:

      一个用于调试

          <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
              <DebugSymbols>true</DebugSymbols>
              <DebugType>full</DebugType>
              <Optimize>true</Optimize>
              <OutputPath>bin\Debug\</OutputPath>
              <DefineConstants>DEBUG;TRACE</DefineConstants>
              <ErrorReport>prompt</ErrorReport>
              <WarningLevel>4</WarningLevel>
              <PlatformTarget>x86</PlatformTarget>
              <DocumentationFile>bin\Debug\GW2.NET.XML</DocumentationFile>
          </PropertyGroup>
      

      还有一个用于发布

          <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
              <DebugType>none</DebugType>
              <Optimize>true</Optimize>
              <OutputPath>bin\Release\</OutputPath>
              <DefineConstants>TRACE</DefineConstants>
              <ErrorReport>prompt</ErrorReport>
              <WarningLevel>4</WarningLevel>
              <DocumentationFile>bin\Release\GW2.NET.XML</DocumentationFile>
              <LangVersion>4</LangVersion>
              <PlatformTarget>x86</PlatformTarget>
          </PropertyGroup>
      

      除了前两个节点(DebugSymbolsDebugType)的明显区别外,主要区别在于 LangVersion 元素。我删除了它,然后项目也在发布模式下构建。

      所以如果你有和我一样的问题,打开.csproj文件,删除这个节点。这应该可以解决它。

      P.S.:LangVersion 元素是什么意思?如果我将它从 4 更改为 4.0,我会收到以下错误:

      /langversion 的选项“4.0”无效;必须是 ISO-1、ISO-2、3、4、5 或默认值

      【讨论】:

      • LangVersion 是编译器将使用的 C# 语言/语法的版本。您在代码中使用的 async 和 await 功能仅适用于 C# 5+。因此在 csproj 中将 LangVersion 设置为 4 会使编译器失败。
      • 即使 async/await 关键字来自 MS BCL 包?因为这就是我用于这些关键字的内容,所以我们以 c# 4.0 为目标,因为它具有向后可比性。
      • async/await 关键字是 C# 5 的一部分,而不是 BCL。 Task Parallel 库(用于实现异步概念的 BCL 类型)是 .Net 4 的一部分,但如果您想使用 async/await 关键字的语言语法“糖”,则需要 C# 5。如果你想在 C# 4 中做异步,你必须直接使用任务类型。
      【解决方案3】:

      如果您使用 Visual Studio 2010 和您自己的自定义对话框构建 WiX 安装项目,并且您的项目在调试模式下构建,而不是在发布模式下,请转到菜单 项目Properties → 将 Tool Settings 设置为 Release Mode 并选中复选框Suppress ICE validation

      【讨论】:

        猜你喜欢
        • 2012-02-19
        • 2015-09-18
        • 2013-06-03
        • 1970-01-01
        • 2014-12-24
        • 2015-08-05
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多