1

我的目标:添加来自其他项目的 dll 并使用 bin 文件夹中的这些文件发布 Web 应用程序。

因此,我尝试发布未包含在我的主 Web 项目中的额外 dll 文件。我需要这样做,因为没有引用几个类库项目。这些项目具有在主 Web 项目文件夹中复制自己的 dll 的构建后事件(感谢 Autofac,我使用 DI 读取它们)。如果我发布所有文件夹,本地效果很好,但是当我想发布主 Web 项目时,额外的 dll 不存在。

我需要将它与 TeamCity 一起使用,因为我想在每次提交时自动发布。这部分有效,唯一的问题是没有发布额外的 dll 文件。

一些有趣的链接:

我尝试过了 :

  • 创建一个 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

4

1 回答 1

1

如果您将 dll(而不是项目)添加为引用,并将它们设置为始终复制,您应该得到您想要的。如何在你想要的地方获取 dll 是另一个问题。我认为这些是您的选择:

  • 在同一个构建中构建依赖项目
  • 在将 dll 提交到源代码控制的不同构建中构建依赖项目
  • 每当依赖项目发生变化时,依赖开发人员检查 dll。-

在我当前的项目中,我们使用第一个和第三个解决方案的组合,这对我们来说很好,因为依赖的 dll 不会经常更改。顺便说一句,我们不直接使用 msbuild 进行发布,我们使用带有 /publish 的 devenv 命令行。

希望这可以帮助!

于 2013-06-09T07:07:20.007 回答