我正在使用 MSBuild 构建一个 Web 应用程序项目并添加参数来创建包文件。这一切都很好。_PublishedWebSites
我在输出中得到两个文件夹:
AppName
AppName_Package
在ApplicationName
文件夹中,整个网站都在那里,我可以简单地将这个文件夹复制到网站上,它就会运行。
在 Package 文件夹中,我得到了预期的 5 个文件:
AppName.deploy.cmd
AppName.-readme.txt
AppName.SetParameters.xml
AppName.SourceManifest.xml
AppName.zip
但是,在部署包时,AppName.dll
缺少 Web 应用程序 dll ( ) 以及其他一些重要的引用依赖项。
检查包本身确实会发现这些文件实际上已从 Web 应用程序bin
目录中丢失。
这很奇怪,考虑到文件都在根AppName
文件夹中,而不是在AppName_Package
文件夹中找到的包中。
我所做的唯一与 MSDeploy 相关的修改是我正在覆盖CopyAllFilesToSingleFolderForPackageDependsOn
目标以从库项目中复制一些处理程序,这一切都很好。
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Libraries\CodeLibrary1\**\*.ashx" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>$(ProjectDir)%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
因此,我无法确定为什么 Web 应用程序的 DLL,并且bin
在包创建过程中仅从目录中删除了一些其他(引用的)DLL(但不是全部 - 可能是 3%)。
任何想法我应该在日志文件中寻找什么?
编辑:(对赛义德的回应):
我真的很感谢你回答我的帖子。不幸的是,我不确定我们是否在同一页面上。就像我说的,我可能没有很好地解释我的问题,无法真正让其他人了解我的问题到底是什么。让我再次尝试澄清一下
将外部文件复制到我的 Web 应用程序中不是问题。我知道浏览我的帖子并看到非常常见的“CopyAllFilesToSingleFolderForPackageDependsOn”元素会引发一些危险信号、警报、铃声和口哨声。。这似乎是人们正在努力解决的一个常见问题,正如您所指出的,它的执行存在一些问题。这对我来说没问题。
我的问题更多地与项目引用的 DLL 有关,最重要的是应用程序 DLL 本身没有被复制。
今天更多的调整揭示了一些我不知道的事情。例如:
在 TFS 上启动构建会输出几件事:
来自 TFS 的源输出到源目录 (SourceDir)
- 这仅包含签入 TFS 的输出
- 这不包括项目或文件引用,只包括在 TFS 中提交的内容
构建的输出在两个文件夹中
- 二进制文件(包括项目和文件引用)
- 来源(仅限 TFS 中包含/提交的内容)
在 Binaries 中,我找到了 _publishedWebsites 文件夹,以及所有项目和文件引用,而在 Sources 中,只有检入 TFS 的文件。
我的问题或困惑是认为当我将以下参数传递给 MSBuild Arguments 时,它将获取构建 (_PublishedWebsites) 的输出并使用这些文件来创建包。它不这样做。
实际过程基于 SOURCES 文件夹中的文件构建一个包。所以,这是我的困境/困惑,因为我没有将我的应用程序 dll 提交到源代码中,它没有包含在包中,因此没有被发送到测试服务器上的测试站点。
/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=RemoteAgent /p:MSDeployServiceUrl=http://<mytestsite> /p:DeployIisAppPath="<AppName>" /p:UserName=<domain\user> /p:Password=<mypassword> /p:SkipExtraFilesOnServer=false /p:AllowUntrustedCertificate=True
总结一下,一旦我在我的开发机器上“签出以进行编辑”我的应用程序 DLL,他们编译解决方案,最后将应用程序 DLL 提交到源代码控制,然后它被包含在包中,因为它只是作为另一个包含在包中源项。
所以,我想这是我的错,因为我不了解如何将 TFS BUILD 的输出放入源文件夹,并将其包含到 msdeploy 使用的包中。
可能有一些非常基本的东西我错过或只是略过 - 并且不理解,包创建来自 Sources 文件夹而不是 _PublishedWebsites 文件夹。我也不明白如何将 MSBuild 编译的应用程序 dll 和项目引用的 dll 放入我的包中——替换源代码控制中已提交的源项目。
我希望这不会完全浪费你的时间,因为我错过了一个
source=<some-parameter>
某处。
我很感激你可以指导我找到任何现有的资源,这些资源已经解释了我应该能够理解它并让它工作的地方。或者如果在这里告诉我很容易。