发布网站项目时,临时路径太长

Bri*_*ton 32 asp.net msbuild vs-web-site-project visual-studio web-publishing

我正在尝试使用" 发布网站"工具发布 ASP.NET网站项目,但是出现此错误:

ASPNETCOMPILER(0,0):错误ASPRUNTIME:指定的路径,文件名或两者都太长.完全限定的文件名必须少于260个字符,目录名必须少于248个字符.

我看到它正在尝试将文件复制到AppData中的一个很长的路径:

Copying all files to temporary location below for package/publish:

C:\Users\imx0\AppData\Local\Temp\1\WebSitePublish\BMW.Web-424993535\obj\Debug\AspnetCompileMerge\Source.

c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /BMW.Web -p C:\Users\imx0\AppData\Local\Temp\1\WebSitePublish\BMW.Web-424993535\obj\Debug\AspnetCompileMerge\Source C:\Users\imx0\AppData\Local\Temp\1\WebSitePublish\BMW.Web-424993535\obj\Debug\AspnetCompileMerge\TempBuildDir
Run Code Online (Sandbox Code Playgroud)

我在.pubxml发布配置文件中找不到有关此临时目录的任何信息.如何更改Visual Studio将文件复制到的临时目录?

Bri*_*ton 43

将其添加到您的发布配置文件以修改包/发布的临时目录:

<AspnetCompileMergeIntermediateOutputPath>c:\shortPath\</AspnetCompileMergeIntermediateOutputPath>
Run Code Online (Sandbox Code Playgroud)

  • @ChrisHardie我发现它在MSBuild安装中挖掘.对我来说,这是`C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.5\Web\Transform`.我也得到关于`WebPublishMethod`无效的错误但它无论如何都有效. (3认同)
  • 你怎么在地球上发现了?! (2认同)
  • 对于VS 2015,这对我没有用 (2认同)

Abd*_*bdu 13

  1. 转到Web项目文件夹,导航到Properties\PublishProfiles文件夹.
  2. 打开配置文件profile_name.pubxml(不是profile_name.pubxml.user)
  3. <AspnetCompileMergeIntermediateOutputPath>c:\shortPath\</AspnetCompileMergeIntermediateOutputPath><PropertyGroup>标签下复制/过去
  4. 保存您的文件,您将能够使用此配置文件发布您的网站


Jos*_*osh 12

这是一个旁听的答案,但我在尝试MSBuild依赖于nodeJS和gulp的解决方案时遇到了这个问题.问题是gulp依赖树变得非常深,aspnet_compiler试图将该树复制到更深的目录,导致此错误.我尝试了这里所提到的一切但没有任何效果.

事实上,我正在使用TFS构建,所以我的解决方案是attrib +h node_modules\* /S /D在msbuild之前运行一个隐藏目录树然后attrib +h node_modules\* /S /D.这样做对我来说.

如果编译器在这种情况下抛出的错误显示导致写入失败的路径,那肯定会很好...

  • 我也遵循了这一点,但决定只做节点目录就足够了.所以,之前执行`attrib + h node_modules`和之后执行`attrib -h node_modules`. (4认同)
  • 哇,这为我解决了!我试图编译我的观点并得到错误.这是我在.csproj文件中添加的内容:<Target Name ="AfterBuild"Condition ="'$(Configuration)'=='Release'"> <Exec Command ="attrib node_modules + h"/> <AspNetCompiler VirtualPath = "temp"PhysicalPath ="$(WebProjectOutputDir)"/> <Exec Command ="attrib node_modules -h"/> </ Target> (3认同)

小智 6

没有其他答案对我有用.

Visual Studio 2013社区版.

我将TMP和TEMP环境变量更改为短文件夹名称,并且它有效.


ken*_*ust 5

尝试添加这个

<IntermediateOutputPath>..\Temp</IntermediateOutputPath>
Run Code Online (Sandbox Code Playgroud)

默认 <propertyGroup />