<!--Use of included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htmWritten by Jomo Fisher--><Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- These two property groups inform VS that there is a Platform called .NET 1.1. --> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|.NET 1.1' "> <DebugSymbols Condition="'$(DebugSymbols)'==''">true</DebugSymbols> <DebugType Condition="'$(DebugType)'==''">full</DebugType> <Optimize Condition="'$(Optimize)'==''">false</Optimize> <OutputPath Condition="'$(OutputPath)'==''">bin\.NET 1.1\Debug\</OutputPath> <DefineConstants Condition="'$(DefineConstants)'==''">DEBUG;TRACE</DefineConstants> <DefineConstants>$(DefineConstants);TARGETTING_FX_1_1</DefineConstants> <ErrorReport></ErrorReport> <WarningLevel Condition="'$(WarningLevel)'==''">4</WarningLevel> <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable> <CscToolPath>$(SystemRoot)\Microsoft.NET\Framework\v1.1.4322</CscToolPath> <TargetFrameworkVersion>v1.0</TargetFrameworkVersion> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|.NET 1.1' "> <DebugType Condition="'$(DebugType)'==''">pdbonly</DebugType> <Optimize Condition="'$(Optimize)'==''">true</Optimize> <OutputPath Condition="'$(OutputPath)'==''">bin\.NET 1.1\Release\</OutputPath> <DefineConstants Condition="'$(DefineConstants)'==''">TRACE</DefineConstants> <DefineConstants>$(DefineConstants);TARGETTING_FX_1_1</DefineConstants> <ErrorReport></ErrorReport> <WarningLevel Condition="'$(WarningLevel)'==''">4</WarningLevel> <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable> <CscToolPath>$(SystemRoot)\Microsoft.NET\Framework\v1.1.4322</CscToolPath> <TargetFrameworkVersion>v1.0</TargetFrameworkVersion> </PropertyGroup>
<!-- Import the standard C# targets --> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- Now that the standard targets have been brought in. Override some properties and items it created. --> <PropertyGroup> <AvailablePlatforms>$(AvailablePlatforms),.NET 1.1</AvailablePlatforms>
<AssemblySearchPaths Condition=" '$(Platform)' == '.NET 1.1' "> {CandidateAssemblyFiles}; $(ReferencePath); {HintPathFromItem}; {TargetFrameworkDirectory}; {AssemblyFolders}; $(OutputPath); {GAC} </AssemblySearchPaths>
<TargetFrameworkDirectory Condition=" '$(Platform)' == '.NET 1.1'"> $(SystemRoot)\Microsoft.NET\Framework\v1.1.4322 </TargetFrameworkDirectory>
</PropertyGroup>
<ItemGroup Condition=" '$(Platform)' == '.NET 1.1'"> <TargetFrameworkDirectoryItem Include="$(SystemRoot)\Microsoft.NET\Framework\v1.1.4322"> <InProject>false</InProject> </TargetFrameworkDirectoryItem> </ItemGroup>
<!-- Override this target from Microsoft.Common.Targets so that we can supply our own value for $(TargetFrameworkDirectory). This controls where assembly resolution logic finds FX assemblies. --> <Target Name="GetFrameworkPaths" DependsOnTargets="$(GetFrameworkPathsDependsOn)">
<!-- Get the path to the target .NET framework directory. --> <GetFrameworkPath Condition=" '$(Platform)' != '.NET 1.1' "> <Output TaskParameter="Path" PropertyName="TargetFrameworkDirectory"/> <Output TaskParameter="Path" ItemName="TargetFrameworkDirectoryItem"/> </GetFrameworkPath>
<!-- Get the path to the target .NET framework SDK directory. --> <GetFrameworkSDKPath Condition=" '$(Platform)' != '.NET 1.1' "> <Output TaskParameter="Path" PropertyName="TargetFrameworkSDKDirectory"/> <Output TaskParameter="Path" ItemName="TargetFrameworkSDKDirectoryItem"/> </GetFrameworkSDKPath>
</Target>
<!-- For 1.1 builds, intercept the call to CorResGen target (which generates 2.0 resources) and slip in a call to our own CoreResGen_1_1. Handily, the devices version of the ResGen task is able to call the 1.1 version of ResGen directly. --> <UsingTask TaskName="CFResGen" AssemblyFile="$(MSBuildBinPath)\Microsoft.CompactFramework.Build.Tasks.dll" /> <PropertyGroup Condition="'$(Platform)' == '.NET 1.1'"> <ResGenDependsOn>ResolveAssemblyReferences;BeforeResGen;CoreResGen_1_1;AfterResGen</ResGenDependsOn> </PropertyGroup> <Target Name="CoreResGen_1_1" DependsOnTargets="$(CoreResGenDependsOn)"> <CFResGen Condition = " '@(ResxWithNoCulture)' != ''" Sources = "@(ResxWithNoCulture)" UseSourcePath = "$(UseSourcePath)" StateFile = "$(IntermediateOutputPath)$(MSBuildProjectFile).CrossCompileResGen.Cache" OutputResources = "@(ManifestResourceWithNoCultureName->'$(IntermediateOutputPath)%(Identity).resources')" > <!-- Appending to 'FilesWritten' list lets us be part of Clean and Incremental Clean. --> <Output TaskParameter = "FilesWritten" ItemName="FileWrites"/> <Output TaskParameter = "OutputResources" ItemName="ManifestResourceWithNoCulture"/> </CFResGen>
<CFResGen Condition = " '@(ResxWithCulture)' != ''" Sources = "@(ResxWithCulture)" UseSourcePath = "$(UseSourcePath)" StateFile = "$(IntermediateOutputPath)$(MSBuildProjectFile).CrossCompileResGen.Cache" OutputResources = "@(ManifestResourceWithCultureName->'$(IntermediateOutputPath)%(Identity).resources')" > <!-- Appending to 'FilesWritten' list lets us be part of Clean and Incremental Clean. --> <Output TaskParameter = "FilesWritten" ItemName="FileWrites"/> <Output TaskParameter = "OutputResources" ItemName="ManifestResourceWithCulture"/> </CFResGen> </Target>
</Project>
This works great for VS2005. I do have a question. Do you know if it is possible to implement this kind of thing for VS2008? It appears as though the MSBuild task framework is completely different in VS2008 and the resource generation no longer works.