我有下面的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构建配置中部署时,一切都正常。所有文件都出现在发布目录中,代码将被更新。但是,当我在发行版配置中部署时,发布过程会删除站点运行所需的三个.dlls。
同样的代码是为所有构建配置构建和发布的,所以我不认为这是问题所在。而且,我不知道我的发布概要文件是否是问题的根源,但如果是的话,唯一值得注意的区别是,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).在dev发布中,它只是不删除这些文件。我已经对.deploy.cmd文件、msbuild生成的文件进行了不同的处理,并在.zip包上进行了文件夹级别的比较,这些包部署了.deploy.cmd文件,但我似乎找不到任何值得提及的差异。
经过进一步调查,只有在我从生产机器构建msdeploy包时,文件才会被删除。如果我在生产机器和Dev机器上签出主干/并运行下面的构建和部署代码,那么从Dev机器部署到任何环境中都是正确的,并且从生产机器部署到任何环境都会删除所需的程序集。有什么全局的msdeploy设置被搞砸了吗?另外,如果你能回答这个问题,也许可以看看我的other, similar one。
有人能解释为什么如果从我的生产机器上运行相同的代码就会破坏我的部署,但是如果从我的dev机器上运行的话,那么无论我部署到哪个环境,都能很好地工作吗?
发布于 2016-09-30 16:56:53
我不完全确定为什么这会起作用,因为缺少的程序集不在故障机器上的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提供
发布于 2016-09-30 14:18:50
这是发布设置的一部分,
如果要进行构建,则发布{project名称}
这将打开一个对话框窗口。
转到“设置”和“文件发布”选项,您将看到一个选项,在发布之前删除所有现有文件。如果您不希望它在部署时删除您的文件,请取消此选项。
https://stackoverflow.com/questions/39793188
复制相似问题