我的目标:添加来自其他项目的 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