0

以下是我的 MSBuild XML。BeforeBuild 中生成的文件不包含在 DLL 中。我期待该文件包含在内。我确实注意到在 BeforeBuild 中调用了 CoreBuild。如何再次进行重建,包括生成的文件。

谢谢

克里斯

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    ...
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    ...
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    ...
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include=".\Resources\Assembly\*.dll" Condition="Exists('.\Resources\Assembly')" />
    ...
    <Reference Include="System.Xml.Linq" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include=".\**\*.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <UsingTask TaskName="EdmTasks.ViewRefreshTask" AssemblyFile=".\Resources\Assembly\EdmTasks.dll" />
  <Target Name="BeforeBuild">
    <MsBuild Projects="ForwardPAS.csproj" Targets="CoreBuild" />
    <ViewRefreshTask Assembly="$(TargetPath)" Lang="cs" DbContext="FranklinIndexedAnnuityDb" />
  </Target>
</Project>
4

2 回答 2

0
<Target Name="BeforeBuild">
    <MsBuild Projects="MyProject.csproj" Targets="CoreBuild" />
    <ViewRefreshTask Assembly="$(TargetPath)" Lang="cs" DbContext="MyDatabaseContext" />
    <MsBuild Projects="MyProject.csproj" Targets="CoreBuild" Properties="Rerun=true" />
</Target>
  1. 在构建期间采取的步骤是:构建之前 b. 构建(包括 CoreBuild) c. 构建后
  2. 由于我们需要在 MyProject.DLL 中构建 MyDatabase.Views.cs,因此我们必须在到达 Build (b) 之前生成它……所以我们将它放在 BeforeBuild (a) 中
  3. 但是 ViewRefreskTask(生成这个文件)需要 MyProject.DLL 作为输入……所以在 ViewRefreskTask 之前我们调用“CoreBuild”(构建 MyProject.dll)
  4. 我最初假设当 BeforeBuild 完成时,它将继续构建和重建项目(因为有一个新文件是 Compile ItemGroup)……但它没有……它只是给出了一条消息“目标“CoreBuild”已跳过。之前构建成功。”</li>
  5. 所以我添加了一个新任务……这仍然让我跳过了“目标“CoreBuild”。之前构建成功。”</li>
  6. 最后,感谢http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/8db6b9e4-16dd-48b2-b243-c6e4c9670982/我添加了 Properties="Rerun=true" 并且它起作用了。

它进行了重建,项目 DLL 具有我生成的视图。

于 2013-02-05T01:36:40.147 回答
0

直接在 csharp 目标行之后

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

添加这个

<PropertyGroup>
  <UseHostCompilerIfAvailable>False</UseHostCompilerIfAvailable>
</PropertyGroup>

VS 将再次抓取源代码进行编译,而不是使用构建过程开始时的缓存版本。

于 2013-08-20T10:00:57.410 回答