Visual studio 2012 发布web项目-MSBuild不复制依赖项目';未添加对web项目的引用的DLL

Visual studio 2012 发布web项目-MSBuild不复制依赖项目';未添加对web项目的引用的DLL,visual-studio-2012,msbuild,Visual Studio 2012,Msbuild,我的web应用程序基本上有三个独立的项目: 我希望发布到生产环境的web项目“MyWeb” 定义业务层接口的库项目“MyBusiness”。此项目被MyWeb项目引用 另一个库项目“MyBusinessImplementation”,包含业务层的实现(具体类实现 业务层的接口) 要进行依赖注入,我的MyWeb项目只需添加对MyBusinessinterfaces项目的引用,而不是对实现的引用(或者我的web项目与实现紧密相关,而且我不能阻止我的开发人员在我的web项目中创建一个具体类的“新”对象

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

  • 我希望发布到生产环境的web项目“MyWeb”
  • 定义业务层接口的库项目“MyBusiness”。此项目被MyWeb项目引用
  • 另一个库项目“MyBusinessImplementation”,包含业务层的实现(具体类实现 业务层的接口)
  • 要进行依赖注入,我的MyWeb项目只需添加对
    MyBusiness
    interfaces项目的引用,而不是对实现的引用(或者我的web项目与实现紧密相关,而且我不能阻止我的开发人员在我的web项目中创建一个具体类的“新”对象)

    如果不直接添加对业务实现项目的引用,则在构建项目时,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>
    
    
    BuildDependentProjects$(BuildDependsOn);
    配置=$(配置)
    
    问题是,当我从VisualStudio2012发布MyWeb项目时,或者当我运行

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

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


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

    看起来您缺少在部署之前将复制的项添加到WebDeploy清单和包的步骤

    查看这篇文章,了解如何在软件包中添加额外文件的最佳答案。