如何更改VS2010中的构建文件夹?

时间:2010-09-15 15:41:00

标签: visual-studio-2010 msbuild

我在VS2010数据库项目中收到错误,表明我的构建路径中有太多的字符。

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

这样的东西
c:\build\$(projectname)\...... 

谢谢!

编辑: 我已经将我的项目移动到C:驱动器的根目录,我仍然得到了我的数据库项目的错误。当我尝试右键单击项目并选择属性

时,出现此错误

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

4 个答案:

答案 0 :(得分:4)

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

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

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

要执行此操作,请查看PropertyGroups,其中包含Configuration&的条件。平台配置及其内部替换OutputPath和IntermediateOutputPath属性,以便它们尽可能短,例如:

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

最后,关于你的属性页加载问题,我不知道Debug | AnyCPU如何在你的路径中得到(我不知道任何存储类似连接味道的属性),但你应该能够打开文件后,很容易就把它拿出来。希望它类似于winforms设计器中的加载错误,你改变了一行,突然整个事情再次起作用。

希望这有帮助!

答案 1 :(得分:1)

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

编辑:根据新编辑,请看一下:

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

答案 2 :(得分:0)

我将一个项目从VS 2005更新到VS 2010并得到了相同的错误消息。 “ 项目元数据”%(文件名)“无法应用于路径”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中重新加载。

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

那么如何解决这个问题?

我只是替换了第三行

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

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

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

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

<强>注意: 在您的情况下,相同的错误消息可能需要另一个修复,而不是在我的情况下。请研究csproj文件并查找管道字符,然后找出try和error如何修改它。此错误甚至可以出现在转换项目之外的其他条件中。

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

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

答案 3 :(得分:0)

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