<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- This .targets file can be used by updating Microsoft.Common.targets to include the line below (as the last import element just before the end project tag) <Import Project="$(MSBuildBinPath)\Microsoft.Data.Entity.targets" Condition="Exists('$(MSBuildBinPath)\Microsoft.Data.Entity.targets')"/> --> <!-- The below ensures that "EntityDeploy" is available in the VS Build Action dropdown --> <ItemGroup> <AvailableItemName Include="EntityDeploy" /> </ItemGroup> <PropertyGroup> <!-- EntityDeployIntermediateResourcePath is the path used to store resources generated from the EDMX file before they are embedded in the build target --> <EntityDeployIntermediateResourcePath>$(IntermediateOutputPath)edmxResourcesToEmbed\</EntityDeployIntermediateResourcePath> </PropertyGroup> <UsingTask TaskName="EntityDeploySplit" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" /> <UsingTask TaskName="EntityDeploy" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" /> <UsingTask TaskName="EntityDeploySetLogicalNames" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" /> <UsingTask TaskName="EntityClean" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" /> <PropertyGroup> <!-- EntityDeployDependsOn deliberately left empty so others can override this --> <EntityDeployDependsOn></EntityDeployDependsOn> <BuildDependsOn> EntityDeploy; $(BuildDependsOn) </BuildDependsOn> </PropertyGroup> <PropertyGroup> <CleanDependsOn> $(CleanDependsOn); EntityClean; </CleanDependsOn> </PropertyGroup> <Target Name="EntityDeploy" DependsOnTargets="$(EntityDeployDependsOn)" Condition="'@(EntityDeploy)' != ''"> <CallTarget Targets="EntityDeployNonEmbeddedResources" /> <CallTarget Targets="EntityDeployEmbeddedResources" /> <CallTarget Targets="EntityDeploySetLogicalNames" /> </Target> <!-- Split the EDMX files into two groups: those whose resources need to be embedded and those whose resources need to be copied Note: this also assigns the EntityDeployRelativeDir metadata to each item so that the same metadata can be used regardless of whether the underlying item is a link or a normal file --> <Target Name="EntityDeploySplit" > <EntityDeploySplit Sources="@(EntityDeploy)" > <Output TaskParameter="EmbeddingItems" ItemName="EntityDeployEmbeddingItems" /> <Output TaskParameter="NonEmbeddingItems" ItemName="EntityDeployCopyingItems" /> </EntityDeploySplit> <Message Condition="'$(EntityDeployDebug)'=='true'" Text="EntityDeploySplit: EntityDeployEmbeddingItems = @(EntityDeployEmbeddingItems)" /> <Message Condition="'$(EntityDeployDebug)'=='true'" Text="EntityDeploySplit: EntityDeployCopyingItems = @(EntityDeployCopyingItems)" /> </Target> <!-- Generate to $(OutputPath) the CSDL, MSL and SSDL resources from the EDMX files set to copy their outputs to the output directory (use SSDL as marker file as that is the last one generated) --> <Target Name="EntityDeployNonEmbeddedResources" DependsOnTargets="EntityDeploySplit" Inputs="@(EntityDeployCopyingItems)" Outputs="@(EntityDeployCopyingItems->'$(OutputPath)%(EntityDeployRelativeDir)%(Filename).ssdl')" > <EntityDeploy Sources="@(EntityDeployCopyingItems)" OutputPath="$(OutputPath)" > </EntityDeploy> </Target> <!-- Generates to $(EntityDeployIntermediateResourcePath) the CSDL, MSL and SSDL resources from the EDMX files set to embed their outputs (use SSDL as marker file as that is the last one generated) --> <Target Name="EntityDeployEmbeddedResources" DependsOnTargets="EntityDeploySplit" Inputs="@(EntityDeployEmbeddingItems)" Outputs="@(EntityDeployEmbeddingItems->'$(EntityDeployIntermediateResourcePath)%(EntityDeployRelativeDir)%(Filename).ssdl')" > <EntityDeploy Sources="@(EntityDeployEmbeddingItems)" OutputPath="$(EntityDeployIntermediateResourcePath)" > </EntityDeploy> </Target> <Target Name="EntityClean" Condition="'@(EntityDeploy)' != ''"> <EntityClean Sources="@(EntityDeploy)" ResourceOutputPath="$(EntityDeployIntermediateResourcePath)" OutputPath="$(OutputPath)" /> </Target> <!-- Define the CSDL/MSL/SSDL files generated from @(EntityDeployEmbeddingItems) as part of the EmbeddedResource ItemGroup which includes them in the build target Note: this must happen regardless of whether the EntityDeployEmbeddedResources target is skipped due to incremental build --> <Target Name="EntityDeploySetLogicalNames" DependsOnTargets="EntityDeploySplit"> <!-- First define the resources to be embedded Note: ignore resources which are not in @(EntityDeployEmbeddingItems) - this ignores resources generated by previous runs which have now had their MetadataArtifactProcessing changed to "CopyToOutput" --> <ItemGroup> <EntityDeployResourcesToEmbed Include="@(EntityDeployEmbeddingItems->'$(EntityDeployIntermediateResourcePath)%(EntityDeployRelativeDir)%(Filename).csdl')" /> <EntityDeployResourcesToEmbed Include="@(EntityDeployEmbeddingItems->'$(EntityDeployIntermediateResourcePath)%(EntityDeployRelativeDir)%(Filename).msl')" /> <EntityDeployResourcesToEmbed Include="@(EntityDeployEmbeddingItems->'$(EntityDeployIntermediateResourcePath)%(EntityDeployRelativeDir)%(Filename).ssdl')" /> </ItemGroup> <Message Condition="'$(EntityDeployDebug)'=='true'" Text="EntityDeploySetLogicalNames: EntityDeployResourcesToEmbed = @(EntityDeployResourcesToEmbed)" /> <!-- Now update their logical names and add them to the list of resources to be embedded --> <EntityDeploySetLogicalNames Sources="@(EntityDeployResourcesToEmbed)" ResourceOutputPath="$(EntityDeployIntermediateResourcePath)" > <Output TaskParameter="ResourcesToEmbed" ItemName="EmbeddedResource"/> </EntityDeploySetLogicalNames> </Target> </Project> |