【问题标题】:How do I change the build folders in VS2010?如何更改 VS2010 中的构建文件夹?
【发布时间】:2010-09-15 15:41:00
【问题描述】:

我在 VS2010 DB 项目中遇到错误,表明我的构建路径中有太多字符。

如何更改所有项目类型的默认构建路径?

有点像

c:\build\$(projectname)\...... 

谢谢!

编辑: 我已将我的项目移至 C: 驱动器的根目录,但我的 DB 项目仍然出现错误。当我尝试右键单击项目并选择属性时出现此错误

尝试加载项目属性窗口时出错。关闭窗口并重试。 无法评估项目元数据“%(FullPath)”。项目元数据“%(FullPath)”不能应用于路径“obj\Debug|Any CPU\TASS.DB.dbschema”。路径中的非法字符。 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets

【问题讨论】:

  • 我已经卸载了 VS2010 并删除了我所有的扩展。现在问题已经解决了。我认为是我使用的扩展程序引起了问题,我会尝试找出是哪个扩展程序并在这里发回
  • 您没有理解错误信息。问题不在于“我的构建路径中有太多字符”。问题是路径“obj\Debug|Any CPU\TASS.DB.dbschema”中有一个无效字符,这显然是管道字符。
  • @Elmue 哈,是的,问题显然是管道字符。事实上,很明显,这些信息就在我五年前的原始答案中。

标签: visual-studio-2010 msbuild


【解决方案1】:

在这里跳出来的第一件事是,您的平台和配置正在融合在一起以形成“调试|任何 CPU”,并且正在制作一个字符串——管道是它在此处引用的字符说有非法字符。我不确定您的数据库项目在调试/发布和架构方面的真正差异有多大,但您甚至可能不需要将它们包含在路径中。

由于您无法打开项目属性页,您需要通过卸载它并从上下文菜单中选择“编辑...”来直接编辑 msbuild(抱歉,如果您已经知道这一点)。

从那里开始,假设您真的在窗户路径长度上限上运行,您可以使用一些 msbuild 技巧来最大化您的净空。具体来说,执行类似于您建议的操作:尽可能使用 C:\ 驱动器。

为此,请在 PropertyGroups 内部查看配置和平台配置的条件,并在其中替换 OutputPath 和 IntermediateOutputPath 属性,使它们尽可能短,例如:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <OutputPath>$(SystemDrive)\D\A</OutputPath>
    <IntermediateOutputPath>$(SystemDrive)\o\D\A</IntermediateOutputPath>
</PropertyGroup>
  • 这可以节省一些有价值的字符,因为您使用的是“D”而不是“Debug”,“A”代表“AnyCPU”,“o”代表“o​​bj”。
  • 可能最重要的是,您使用 C:\o\ 作为中间构建目录,而不是 C:\whatever-the-whole-path-is-to-your-project-file\obj。同样,据我回忆,此属性无法从属性页面进行配置。
  • 使用 SystemDrive 而不是硬编码的 C: 增加了一些灵活性,我并不希望它会有所不同。

最后,关于您的属性页面加载问题,我不知道 Debug|AnyCPU 是如何进入您的路径的(我不知道有任何属性可以存储这样的串联风味),但您应该能够打开文件后很容易将其选中。希望它类似于 winforms 设计器中的加载错误,您在其中更改了一行,然后突然整个事情又恢复了。

希望这会有所帮助!

【讨论】:

  • 谢谢你,但不幸的是它没有任何区别。我相信这与我的一个扩展有关。我将对此进行测试,如果我发现问题,我将编辑我的帖子。我很欣赏你的帖子。写得好,易于理解:)
  • 感谢您的批评!抱歉,这没有为您完成。我想这一定是数据库项目文件的问题。如果不涉及面向 IP 的风险,我很乐意查看您的。我很快就会成为一个 msbuild 瘾君子 ;)
  • 感谢 Bwerks。我想我找到了问题扩展。我为 T4 编辑下载的一组“有形”扩展...不太确定它们为什么会导致这种情况,但我不再需要它们,所以我不会重新安装。您的帖子没有解决我的问题,但它确实允许我更改构建文件夹 - 所以正确回答了我的第一个问题! :)
  • 非常感谢!很高兴我至少能帮上这么多忙。
  • 这个答案是错误的。正如“littlechris”所写的那样,“我的构建路径中没有太多的字符”。错误消息清楚地表明路径中存在无效字符。所以缩短路径不是解决办法。
【解决方案2】:

我认为不可能为所有项目设置默认构建路径,只有项目本身内的标准 Debug/Release 文件夹。我唯一的建议是将项目文件夹移动到路径较短的位置。

编辑:根据新的编辑,请看这里:

http://connect.microsoft.com/VisualStudio/feedback/details/594333/database-project-template-files-corrupt

【讨论】:

  • 感谢 djfrear。我已经尝试过了,但在我的数据库项目中仍然出现同样的错误。我在上面编辑了我的问题
  • 与其他所有相同:您不理解错误消息。
【解决方案3】:

我将一个项目从 VS 2005 更新到 VS 2010 并收到相同的错误消息。 “项目元数据“%(Filename)”不能应用于路径“obj\Debug|x86\Debug\DemoCSharp.pdb”。路径中有非法字符。”问题是 Visual Studio 2010 无法将 csproj 文件转换为新格式,但它并没有告诉我们错误的确切位置。

在我的 VS 2005 csproj 文件中有以下 XML 代码:

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">Debug|x86</Platform>
    <ProductVersion>8.0.50727</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{05F88317-0CA7-4FE5-8520-35422402941A}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <RootNamespace>DemoCSharp</RootNamespace>
    <AssemblyName>DemoCSharp</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>..\output32\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <OutputPath>..\output32\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>..\output64\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
    <OutputPath>..\output64\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>

Visual Studio 不会告诉我们是哪一行产生了问题。但我是通过“试错”找到的。

错误消息的原因显然是Visual Studio 转换向导中的错误,因为 VS 2005 加载此 csproj 文件没有问题,而 VS 2010 无法转换它。

所以你必须手动编辑和修复这个文件,然后在 VS2010 中重新加载它。

在我的情况下,触发错误的行是带有&lt;Platform Condition 的 3. 行。错误是 VS 尝试获取此平台条件 XML 节点的 value ("Debug|x86") 并将其嵌入到磁盘上的路径中(如 "...\obj\Debug|x86 \...”)。但由于管道字符在路径中是非法的,它随后会抱怨并中止转换。

那么如何解决这个问题呢?

我只是替换了第三行

<Platform Condition=" '$(Platform)' == '' ">Debug|x86</Platform>

<Platform Condition=" '$(Platform)' == '' ">Debug</Platform>

这消除了管道字符和项目转换没有错误。

注意:也可以完全删除这一行。

注意: 在您的情况下,与我的情况相比,相同的错误消息可能需要另一个修复。请研究 csproj 文件并查找管道字符,然后通过尝试和错误找出如何修改它。此错误甚至可能出现在转换项目以外的其他条件下。

但它们的共同点是,这是一个试图将管道字符嵌入到路径中的 Visual Studio 错误(或者在“littlechris”的情况下是一个软件扩展错误)。

XML node: "Debug|x86" -> path "...\obj\Debug|x86\..."

【讨论】:

    【解决方案4】:

    我收到此消息是因为我的项目中一个文件的绝对路径超过了 260 个字符。一旦我减少了路径长度,我就能够构建项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多