Visual Studio Web部署在发布发布期间删除dll

时间:2016-09-30 13:53:24

标签: c# msbuild iis-7 web-deployment webdeploy

我已经获得了以下用于构建和部署的nant脚本:

<msbuild project=".\Code\Code.sln" target="Build">
    <property name="Configuration" value="${Build.Configuration}" />
    <property name="Platform" value="${build.platform}" />
    <property name="CreatePackageOnPublish" value="true" />
    <property name="DeployOnBuild" value="true" />
    <property name="DeployIISAppPath" value="Default Web Site\${Web.Path}" />
</msbuild>

<exec program=".\Code\CodeWeb\obj\${Build.Configuration}\Package\CodeWeb.deploy.cmd" commandline="/y /m:webhost.mycompany.com /u:DOMAIN\user /p:password"/>

我的问题是:当我在Debug或RC构建配置中部署时,一切正常。所有文件都存在于发布目录中,并且代码已更新。但是,当我在发布配置中部署时,发布过程会删除我的站点运行所需的三个.dll。

同样的代码正在构建和发布所有构建配置,所以我不认为这可能是问题。此外,我不知道我的任何发布配置文件是否是问题的根源,但如果它们是,那么唯一明显的区别是Production.pubxml.user包含一大堆<ItemGroup>元素列出文件的<File>个子元素,其中Development.pubxml.user不包含任何内容。但是,我将<ItemGroup>从Production.pubxml.user复制到Development.pubxml.user中,它没有破坏开发发布过程。

我的msdeploy.exe日志以如下方式为生产发布

启动
SetParameters from:
"C:\Shared\Code\CodeWeb\obj\Release\Package\CodeWeb.SetParameters.xml"
You can change IIS Application Name, Physical path, connectionString
or other deploy parameters in the above file.
-------------------------------------------------------
 Start executing msdeploy.exe
-------------------------------------------------------
 "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:package='C:\Shared\Code\CodeWeb\obj\Release\Package\CodeWeb.zip' -dest:auto,computerName="webhost.mycompany.com",userName="DOMAIN\user",password="password",includeAcls="False" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"C:\Shared\Code\CodeWeb\obj\Release\Package\CodeWeb.SetParameters.xml" 
Info: Using ID '52641dbe-b1e5-4ff5-9962-01386a7fe513' for connections to the remote server.
Info: Deleting file (Default Web Site\CodeStaging\bin\System.Net.Http.Formatting.dll).
Info: Deleting file (Default Web Site\CodeStaging\bin\System.Web.Http.dll).
Info: Deleting file (Default Web Site\CodeStaging\bin\System.Web.Http.WebHost.dll).

在开发版中,它不会删除这些文件。我已经将.deploy.cmd文件与.deploy.cmd文件部署的.zip包中的.deploy.cmd文件以及完成的文件夹级别比较进行了区分,但我似乎无法找到任何值得一提的差异。

经过进一步调查,只有在我从生产机器构建msdeploy软件包时才会删除这些文件。如果我在我的生产和Dev机器上检查trunk /并运行下面的构建和部署代码,那么从Dev机器部署到任何环境都可以正常工作,并从生产机器部署到任何环境会删除我需要的程序集。是否有某些全局的msdeploy设置被搞砸了?此外,如果您能够回答这个问题,或许请查看我的other, similar one

任何人都可以解释为什么相同的代码会破坏我的部署,如果从我的生产机器运行,但是如果从我的开发机器运行,那么无论我正在部署哪个环境,它都能正常工作?

2 个答案:

答案 0 :(得分:1)

我不完全确定为什么这会有效,因为丢失的程序集不在故障机器上的GAC中,而是添加

<Private>True</Private>

在我的.csproj文件中对这些缺少的程序集的每个引用下都修复了它。参考文献现在看起来像这样:

<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.4.0.20710.0\lib\net40\System.Net.Http.Formatting.dll</HintPath>
</Reference>

http://bronumski.blogspot.com/2009/06/project-reference-fun-and-games.html提供

答案 1 :(得分:0)

这是发布设置的一部分,

如果你去Build |发布{project Name}

这将打开一个对话窗口

转到“设置和文件发布选项”,您将看到一个选项在发布之前删除所有现有文件。如果您不希望在部署时删除文件,请取消选中此项。