Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 由于文件路径太长,网站发布失败_Asp.net_Visual Studio_Visual Studio 2012_Msbuild - Fatal编程技术网

Asp.net 由于文件路径太长,网站发布失败

Asp.net 由于文件路径太长,网站发布失败,asp.net,visual-studio,visual-studio-2012,msbuild,Asp.net,Visual Studio,Visual Studio 2012,Msbuild,我正试图从一个供应商那里发布一个网站项目,该供应商的一些文件路径长得离谱。发布时,错误为: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. 发布时,Visual Studio 2012 Update

我正试图从一个供应商那里发布一个网站项目,该供应商的一些文件路径长得离谱。发布时,错误为:

The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
发布时,Visual Studio 2012 Update 3正在尝试写入临时目录,前缀很长:

 C:\Users\cuser\AppData\Local\Temp\WebSitePublish\MidasCMS400v9-1580334405\obj\Debug\Package\PackageTmp\
我想我可以按照下面的答案将VS重定向到另一个临时目录
c:\tem

我创建了我的发布配置文件,一旦打开它,就会出现一个错误,表明
WebPublishMethod
不是
PropertyGroup
的元素。无论如何,我更新了文件,使其看起来像这样:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>C:\Sites\MidasPublish</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <AspnetCompileMergeIntermediateOutputPath>c:\tem\</AspnetCompileMergeIntermediateOutputPath>
  </PropertyGroup>
</Project>

文件系统
调试
任何CPU
假的
C:\Sites\MidasPublish
假的
c:\tem\
当我尝试发布时,会弹出一个名为“检测到文件修改”的模式框,其中显示消息“您的网站的项目已在外部环境中修改”,它会询问我是否要重新加载。在我的错误列表中,我继续得到关于路径太长的错误,因为它没有尝试使用我标识的
c:\tem
目录


我需要把这个该死的东西放到服务器上,我准备好了任何可以让我发布这个该死的东西的解决方案。我对网站项目模板了解不多,所以请告诉我是否有更好的方法。

此错误是由于路径名太长……您只需将文件夹从当前位置剪切到D驱动器或F驱动器。假设您的项目文件夹名为“myproject”,您应该剪切此文件夹并粘贴到F驱动器的D驱动器,当前路径名为D:\myproject或F:\myproject。然后您再次发布……它将从……起作用。

在web项目文件的默认属性组中添加以下行。

<IntermediateOutputPath>..\Temp\</IntermediateOutputPath>
。\Temp\
您可以根据需要设置上述路径C:\temp或……\temp(以使其尽可能接近驱动器的根目录)


在我的例子中,没有.csproj或.vbproj(网站项目文件)但是有一个website.publishproj文件警告您不要编辑它,但我还是编辑了它,它成功了。

将项目移近根文件确实有效。我找到了一个链接,指向一个对我有效的解决方案。该网站在讨论这个问题以及他解决方案背后的细节方面也做得很好

编辑:

要总结提供的链接,请执行以下操作:

您可以更新MSBuild使用的发布配置文件,以包含替换规则,该规则将在发布到web部署包(Zip文件)时缩短输出路径

例如,假设使用Visual Studio创建的默认配置文件发布,我们在zip文件中获得以下路径:

archive.xml
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\bin
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\bin\WebApplication1.dll
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\index.html
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\Web.config
parameters.xml
systemInfo.xml
诀窍是用较短的路径替换内容后面定义的所有路径。在这个特定示例中,在PackagePath元素中将路径替换为“website”

可以编辑发布概要文件(.pubxml),并在项目元素终止之前,在文件末尾附近添加以下行

<PropertyGroup>
  <PackagePath Condition=" '$(PackagePath)'=='' ">website</PackagePath>
  <EnableAddReplaceToUpdatePacakgePath Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='' ">true</EnableAddReplaceToUpdatePacakgePath>
    <PackageDependsOn>
    $(PackageDependsOn);
    AddReplaceRuleForAppPath;
    </PackageDependsOn>
</PropertyGroup>
<Target Name="AddReplaceRuleForAppPath" Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='true' ">
  <PropertyGroup>
    <_PkgPathFull>$([System.IO.Path]::GetFullPath($(WPPAllFilesInSingleFolder)))</_PkgPathFull>
  </PropertyGroup>

  <!-- escape the text into a regex -->
  <EscapeTextForRegularExpressions Text="$(_PkgPathFull)">
    <Output TaskParameter="Result" PropertyName="_PkgPathRegex" />
  </EscapeTextForRegularExpressions>

  <!-- add the replace rule to update the path -->
  <ItemGroup>
    <MsDeployReplaceRules Include="replaceFullPath">
      <Match>$(_PkgPathRegex)</Match>
      <Replace>$(PackagePath)</Replace>
    </MsDeployReplaceRules>
  </ItemGroup>
</Target>
多亏了来自的Stelvio,我们有了一个解决方案:

嗯,我找到了一个变通方法,允许使用超过260个字符的path

免责声明:我只在Windows8x64和VisualStudio2013上尝试过这个技巧

因此,为了使其正常工作,我只需使用mklink命令创建一个到文件夹的连接:

假设这是原始路径:d:\very\very\long\path\to\solution\folder,您可以获得一个短链接,作为d:\short\u path\u to\u solution\u folder,只需以管理员身份从dos shell中启动此命令: mklink/J d:\short\u path\u to\u solution\u文件夹d:\very\very\long\path\to\solution\folder

根据需要更改源和目标路径

致以最良好的祝愿! 斯泰尔维奥

通过此链接:

Jason Beck的答案对我来说只做了一点小改动。为了避免错误“IntermediateOutput路径必须以尾部斜杠结尾”。请使用路径末尾的“\”: ..\Temp\

您的“CONFIG_PUBLISH_FILE.pubxml”应该如下所示(该“…”省略了您的文件可能具有的其他配置): ... ... ..\Temp\ ...

发布项目时,visual studio编译器会检查作为项目一部分的文件的大小

所以我在文件中搜索长名字。 我找到并重命名了这些文件


工作是否完美

您好,您有没有找到上述问题的解决方案,我也面临着类似的问题。恐怕没有,我只是删除了一些更深层次的文件夹来解决这个问题-不理想!是的。我最后也做了手动xcopy,而不是使用鼠标右键单击>>发布选项。看看这个答案。它解决了问题对我来说,我也遇到了同样的错误。我的问题与App_数据解决方案子文件夹中的长文件名有关。用短文件名重命名文件为我解决了问题。虽然此链接可以回答问题,但最好包含答案的基本部分并提供链接供参考。如果链接页面更改。我喜欢这个答案,因为我还观察到问题不一定与中间输出直接相关,而是与压缩包文件中包含的长路径直接相关。这样,您就不必更改整个项目的中间输出,只会影响web deploy包的发布。So我最近发现了一些与此相关的新的、有用的信息:在Website\App\u Data\PublishProfiles中,您可以编辑发布配置文件时创建的.publishxml文件。在该文件中,您可以创建一个标记。这是一个更好(更持久)的方法路由而不是编辑生成的website.publishproj文件。我们从Jenkins运行MSBuild。我只需在命令行中添加以下内容即可使其正常工作:/p:IntermediateOutputPath=c:\temp\(注意尾部斜杠是必需的)。我知道这一点
archive.xml
Content\website
Content\website\bin
Content\website\bin\WebApplication1.dll
Content\website\index.html
Content\website\Web.config
parameters.xml
systemInfo.xml