Web 为什么VS2013在使用其他计算机时发布所有网站文件?

Web 为什么VS2013在使用其他计算机时发布所有网站文件?,web,visual-studio-2013,publish,Web,Visual Studio 2013,Publish,我有一台家用电脑和办公电脑,我使用Visual Studio 2013发布网站。如果我在同一台机器上进行更改并重新发布,则只发布更改,而不是发布所有文件 然而,在办公室使用我的克隆机时,即使我做了一个“获取最新信息”,做了一个小的更改,然后重新发布,所有文件都会发布,而不仅仅是更改的文件,也不仅仅是重新编译的文件。所有dll文件,即使是未更改或已使用新日期重新编译的第三方dll,都将重新发布。如果我的团队在我最后一次发布后在他的机器上发布了一个小改动,同样的事情也会发生。如果从同一台计算机上发布

我有一台家用电脑和办公电脑,我使用Visual Studio 2013发布网站。如果我在同一台机器上进行更改并重新发布,则只发布更改,而不是发布所有文件

然而,在办公室使用我的克隆机时,即使我做了一个“获取最新信息”,做了一个小的更改,然后重新发布,所有文件都会发布,而不仅仅是更改的文件,也不仅仅是重新编译的文件。所有dll文件,即使是未更改或已使用新日期重新编译的第三方dll,都将重新发布。如果我的团队在我最后一次发布后在他的机器上发布了一个小改动,同样的事情也会发生。如果从同一台计算机上发布两次,则仅发布更改的文件,这不是问题


是否仅仅因为使用了与上次发布不同的计算机进行发布,就可以阻止完全重新发布?谢谢。

首先,我不完全了解MSBuild+VS2013的行为和发布功能,因为我自己刚刚开始使用发布功能。我正在寻找一种在VS2013中通过FTP web deploy加速发布的方法。(不过,我没有使用TFS获取最新信息。)

我想说,这是部分解释在不同的背景下,在。MSBuild进程。正在比较某些文件的时间戳,然后可能会指示MSBuild/VS2013目标(生成输出)是否为最新。然后,将重新编译非最新的文件。 当你们都在不同的机器上工作时,时间戳很快就会不同

要了解生成/发布期间的实际情况,请暂时将生成输出详细设置为详细或诊断: VS2013菜单-工具-选项…-项目和解决方案-构建和运行-输出详细信息-设置为->详细或诊断。运行构建,并查看VS2013中的输出面板/选项卡。选择“显示来自:构建的输出”以查看尚未可见的结果。在检查构建细节后,不要忘记将其设置为原始设置,因为这可能会使构建速度减慢一点

但为什么即使是未更改的第三方dll也要重新发布?可能是因为这些dll在生成过程中实际上被覆盖了。您可以将程序集引用属性“Copy local”设置为true,以使您的网站运行,而无需为此进行任何手动上载。或者,在项目的生成后事件(如“copy/y…”或“xcopy/y…”)期间,您正在使用命令行copy命令,并将OVERVERSE参数显式设置为true。然后肯定会覆盖要发布的文件的时间戳,请参见中的 “obj\Release\Package\PackageTmp”文件夹(例如,如果为所选发布配置文件设置了调试生成,则为“\Debug”而不是“\Release”)

此外,如果您使用FTP发布,VS2013作为默认值不会检查目标Web服务器上的时间戳差异,至少这是我的经验。至于其他发布选项,比如web部署,我还不知道。但是您所经历的差异对我来说似乎是正常的行为,因为您在不同的机器上运行构建,并从不同的机器发布文件。所以时间戳可能不同。。。这同样表示要发布的“已更改”文件

由于我很好奇这个问题应该如何解决,我首先在寻找这个问题: TFS构建服务器可能是您的一个选项,配置为滚动构建。但我读了一篇特别的文章(抱歉,我刚刚注册,现在不能添加更多链接),建议进行干净的构建以防止出现新问题。这将再次强制完全发布,因为所有文件都被干净的构建更改。。。所以我想那是行不通的

作为回答,您可能希望用于web部署。见问题:

  • “我可以从部署中排除特定文件或文件夹吗?”.NET 4.0/4.5和/或
  • “如何使Web部署使用文件校验和而不是日期来 确定更改了哪些文件?”,仅限.NET 4.5 第一个选项是排除文件。 第二种选择是使用校验和来比较文件,而不是时间戳,但正如FAQ所说,这可能会在一定程度上减慢构建过程。注意FAQ页面上的前几行,关于如何编辑发布配置文件以应用其中一个或两个元素

    此外,还可以选择将第三方dll放在不同的项目中,然后只能将该项目包含在特定解决方案配置的部署中(VS2013菜单-构建-配置管理器,查看每个项目的“部署”列中的复选框。虽然我不确定这是否是VS2013“发布”功能作为web部署的一部分,因为我的解决方案项目的“部署”列复选框因某种原因变灰,我还不明白……因此我无法对其进行验证。)(请选择此选项。)

    尽管这听起来很合乎逻辑,但在更改任何设置或发布配置文件之前,不要忘记先创建备份/副本/屏幕截图,然后在您和您的同事工作的其他计算机上更改相同的设置/可配置文件。

    这似乎会使“确定更改”慢很多,但对于.Net 4.5[和] 向上(?),使用以下信息: :

    将Web部署配置为使用校验和而不是日期来确定 如果需要将哪些文件复制到服务器,请添加以下元素 到.pubxml文件(发布设置):

    true
    
    像这样:

    
    真的
    

    没有人见过或处理过这个问题吗?运气好吗?我也有同样的问题。不,我已经解决了。我的同事通常会发布网站,当我在他之后发布时,所有内容都会更新,反之亦然,但当我们在自己之后发布时就不会了。有趣的是,当我在家或办公室公开时,它会上传到eve但是什么
    <MSDeployUseChecksum>true</MSDeployUseChecksum>
    
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <MSDeployUseChecksum>true</MSDeployUseChecksum>
        <!— other settings omitted to keep the example short -->
        <PublishDatabaseSettings>
          <!— this section omitted to keep the example short -->
        </PublishDatabaseSettings>
      </PropertyGroup>
    </Project>