发布未包含在Web项目中的额外DLL文件

时间:2013-06-06 18:49:54

标签: deployment msbuild continuous-integration publish

我的目标:添加来自其他项目的dll,并将这些文件发布到bin文件夹中。

所以我尝试发布我的主要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文件的末尾插入自定义目标。这是关注该问题的另一个主题:DefineCustomFiles and CustomCollectFiles are not fired by TeamCity

1 个答案:

答案 0 :(得分:1)

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

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

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

希望这有帮助!