我的目标:添加来自其他项目的 dll 并使用 bin 文件夹中的这些文件发布 Web 应用程序。
因此,我尝试发布未包含在我的主 Web 项目中的额外 dll 文件。我需要这样做,因为没有引用几个类库项目。这些项目具有在主 Web 项目文件夹中复制自己的 dll 的构建后事件(感谢 Autofac,我使用 DI 读取它们)。如果我发布所有文件夹,本地效果很好,但是当我想发布主 Web 项目时,额外的 dll 不存在。
我需要将它与 TeamCity 一起使用,因为我想在每次提交时自动发布。这部分有效,唯一的问题是没有发布额外的 dll 文件。
一些有趣的链接:
- http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx
- https://github.com/geersch/TeamCity/blob/master/src/part-2/README.md
- http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity.html
我尝试过了 :
- 创建一个 MSBuild 文件以动态插入 DLL > 失败
- 添加前/后构建/发布事件>失败,类库项目在主项目之后编译
- 更改构建顺序 > 失败原因取决于依赖项(我希望主项目忽略所有其他项目)
我现在可以尝试什么?任何帮助将不胜感激。
更新
我尝试添加自定义文件(在此处找到:http: //blog.samstephens.co.nz/2010-10-18/msbuild-including-extra-files-multiple-builds/),这是我的构建文件。我在 TeamCity 中启动 BuildAll 目标。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WorkingFolder>$(MSBuildProjectDirectory)</WorkingFolder>
<SolutionFile>..\Project.sln</SolutionFile>
<TargetFolder>..\Project.MvcApp\bin</TargetFolder>
<Configuration>Release</Configuration>
</PropertyGroup>
<Target Name="BuildAll" DependsOnTargets="Compile">
<Message Text="=== BuildAll: $(Configuration) configuration ===" />
</Target>
<Target Name="Compile">
<Message Text="=== Compile: $(Configuration) configuration, $(WorkingFolder) working folder ===" />
<MSBuild Projects="$(SolutionFile)" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="DefineCustomFiles">
<ItemGroup>
<CustomFilesToInclude Include="..\Project.Login\bin\Project.Login.dll" />
<CustomFilesToInclude Include="..\Project.Login\bin\$(Configuration)\Project.Login.dll" />
</ItemGroup>
</Target>
<Target Name="CustomCollectFiles">
<ItemGroup>
<FilesForPackagingFromProject Include="@(CustomFilesToInclude)">
<DestinationRelativePath>$(TargetFolder)\%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
DefineCustomFiles;
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
</Project>
Project.MvcApp 是主要的 MVC 应用程序,Project.sln 是全局解决方案文件,Project.Login 是我希望将 dll 插入到出版物中的项目。
我在这里做错了什么?:(
更新
解决方案是在 .csproj 文件的末尾插入自定义目标。这是另一个关注该问题的线程:TeamCity 未触发 DefineCustomFiles 和 CustomCollectFiles