我的目标:添加来自其他项目的dll,并将这些文件发布到bin文件夹中。
所以我尝试发布我的主要Web项目中未包含的额外dll文件。我需要这样做,因为没有引用几个类库项目。这些项目有后期构建事件,可以在主Web项目文件夹中复制自己的dll(由于Autofac,我用DI读取它们)。在本地,如果我发布所有文件夹,它的效果很好,但是当我想发布主要的web项目时,额外的dll不在那里。
我需要在TeamCity中使用它,因为我想在每次提交时自动发布。这部分有效,唯一的问题是没有发布额外的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
答案 0 :(得分:1)
如果您将dll(而不是项目)添加为引用,并将它们设置为始终复制,您应该得到您想要的。如何将dll放在你想要的地方是另一个问题。我认为这些是您的选择:
在我目前的项目中,我们使用第一个和第三个解决方案的组合,这对我们来说很好,因为依赖的dll不会经常变化。顺便说一下,我们不直接使用msbuild进行发布,我们使用devenv命令行和/ publish。
希望这有帮助!