发布web项目 - MSBuild不会复制未添加到web项目引用的依赖项目的DLL

3
我的Web应用程序基本上由三个独立的项目组成:
  1. 一个名为“MyWeb”的Web项目,我想将其发布到生产环境
  2. 一个名为“MyBusiness”的库项目,该项目定义了业务层的接口。这个项目被MyWeb项目引用
  3. 另一个名为“MyBusinessImplementation”的库项目,其中包含业务层的实现(具体类实现了业务层的接口)。
为了进行依赖注入,我的MyWeb项目只需添加对“MyBusiness”接口项目的引用,而不是实现(否则,我的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>

问题在于,当我从Visual Studio 2012发布MyWeb项目或运行“MSBuild "MyWeb.jsproj" \T:Package \P:Configuration=Debug”命令时,发现MyBusinessImplementation.dll被复制到我的工作代码目录中MyWeb的bin文件夹中,但没有复制到发布包目录中。
我尝试将Copy任务的DestinationFolder更改为绝对路径,例如“C:\ abc”,然后可以成功地将.dll文件复制到abc文件夹中,但仍未复制到我的包的网站的bin文件夹中。
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接