我已经获得了以下用于构建和部署的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。
任何人都可以解释为什么相同的代码会破坏我的部署,如果从我的生产机器运行,但是如果从我的开发机器运行,那么无论我正在部署哪个环境,它都能正常工作?
答案 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}
这将打开一个对话窗口
转到“设置和文件发布选项”,您将看到一个选项在发布之前删除所有现有文件。如果您不希望在部署时删除文件,请取消选中此项。