发布Web项目 - MSBuild不复制依赖项目的DLL,这些DLL未添加对Web项目的引用

时间:2013-12-05 09:30:23

标签: visual-studio-2012 msbuild

我的网络应用程序基本上有三个独立的项目:

  1. 我想要发布到生产环境的Web项目“MyWeb”
  2. 库项目“MyBusiness”,用于定义业务层的接口。该项目由MyWeb项目
  3. 引用
  4. 另一个库项目“MyBusinessImplementation”,它包含Business层的实现(具体类实现了 业务层的接口)。
  5. 要做依赖注入,我的MyWeb项目只是添加对MyBusiness interfaces项目的引用,而不是实现(或者我的web项目与实现密切相关,而且我也无法阻止我的开发人员在我的web项目中创建具体类的“新”对象)。

    在不直接向Business实现项目添加引用的情况下,构建项目时,Visual Studio不知道将实现项目的DLL复制到Web的bin文件夹中,因此我将其添加到MyWeb项目文件中:

    <PropertyGroup>
        <BuildDependsOn>BuildDependentProjects;$(BuildDependsOn);</BuildDependsOn>
    </PropertyGroup>
    <ItemGroup>
        <ProjectToBuild Include="$(SolutionDir)\MyBusinessImplementation\MyBusinessImplementation.csproj">
        <Properties>Configuration=$(Configuration)</Properties>      
        </ProjectToBuild>    
    </ItemGroup>
    <Target Name="AfterBuild">
        <Copy SourceFiles="$(SolutionDir)\MyBusinessImplementation\bin\$(Configuration)\MyBusinessImplementation.dll" DestinationFolder="$(SolutionDir)\MyWebSite\bin"></Copy>    
    </Target>
    <Target Name="BuildDependentProjects">    
        <MSBuild Projects="@(ProjectToBuild)" />    
    </Target>
    

    问题是,当我从Visual Studio 2012发布MyWeb项目时,或者当我运行

      

    “MSBuild”MyWeb.jsproj“\ T:Package \ P:Configuration = Debug”

    我看到MyBusinessImplementation.dll被复制到我工作代码目录的MyWeb的bin文件夹中,但不会复制到已发布的包目录中。

    我还尝试将Copy任务的DestinationFolder更改为绝对路径,如“C:\ abc”,然后我看到.dll文件已成功复制到abc文件夹,但仍未复制到我的Package的web bin文件夹。

1 个答案:

答案 0 :(得分:1)

在部署之前,您似乎错过了将复制的项目添加到WebDeploy清单和包中的步骤。

查看此帖子,了解如何在软件包中包含额外文件的绝佳答案 How do you include additional files using VS2010 web deployment packages?