This is also applicable for the properties $(MSBuildExtensionsPath32) and $(MSBuildExtensionsPath64),
and the environment variables have the corresponding names - MSBuildExtensionsPath32/64 .
.TP
+.I "XBUILD_FRAMEWORK_FOLDERS_PATH"
+With ToolsVersion 4.0, projects can target arbitrary frameworks referenced by TargetFrameworkMoniker,
+which is of the format:
+
+ Identifier,Version=<version>[,Profile=<profile>]
+
+Eg. ".NETFramework,Version=v4.0"
+
+The 3 parts of the moniker are given by the msbuild properties:
+
+ $(TargetFrameworkIdentifier), $(TargetFrameworkVersion) and $(TargetFrameworkProfile)
+
+This moniker maps to a framework description file on disk:
+
+ <framework_root>/Identifier/Version/[Profile]/RedistList/FrameworkList.xml
+
+Framework root here is configurable and is resolved in the following order:
+
+.nf
+ 1. Paths specified in the environment variable $XBUILD_FRAMEWORK_FOLDERS_PATH
+ 2. /Library/Frameworks/Mono.framework/External/xbuild-frameworks on Mac OSX.
+ 3. MSBuild property $(TargetFrameworkRoot)
+ 4. $prefix/lib/mono/xbuild-frameworks (default location)
+.fi
+
+XBuild tries the paths given above, in order, till it finds a FrameworkList.xml for the moniker.
+Running with /v:detailed or higher verbosity will show the various paths that it tries.
+.TP
.I "XBUILD_COLORS"
If this variable is set, it contains a string of the form
"type=foreground,type=.." that specifies which color to use to display
Microsoft.Build.Tasks/GetAssemblyIdentity.cs
Microsoft.Build.Tasks/GetFrameworkPath.cs
Microsoft.Build.Tasks/GetFrameworkSdkPath.cs
+Microsoft.Build.Tasks/GetReferenceAssemblyPaths.cs
Microsoft.Build.Tasks.Hosting/ICscHostObject.cs
Microsoft.Build.Tasks.Hosting/IVbcHostObject.cs
Microsoft.Build.Tasks/LC.cs
--- /dev/null
+using System;
+using Microsoft.Build.Framework;
+using System.IO;
+using System.Reflection;
+using System.Xml;
+using System.Collections.Generic;
+
+using Mono.XBuild.Utilities;
+
+#if NET_4_0
+
+namespace Microsoft.Build.Tasks
+{
+ public class GetReferenceAssemblyPaths : TaskExtension
+ {
+ static string framework_base_path;
+ static string PathSeparatorAsString = Path.PathSeparator.ToString ();
+ const string MacOSXExternalXBuildDir = "/Library/Frameworks/Mono.framework/External/xbuild-frameworks";
+
+ public GetReferenceAssemblyPaths ()
+ {
+ }
+
+ public override bool Execute ()
+ {
+ FrameworkMoniker moniker = null;
+ if (!TryParseTargetFrameworkMoniker (TargetFrameworkMoniker, out moniker))
+ return false;
+
+ var framework = GetFrameworkDirectoriesForMoniker (moniker);
+ if (framework == null) {
+ Log.LogWarning ("Unable to find framework corresponding to the target framework moniker '{0}'. " +
+ "Framework assembly references will be resolved from the GAC, which might not be " +
+ "the intended behavior.", TargetFrameworkMoniker);
+ return true;
+ }
+
+ ReferenceAssemblyPaths = FullFrameworkReferenceAssemblyPaths = framework.Directories;
+ TargetFrameworkMonikerDisplayName = framework.DisplayName;
+
+ return true;
+ }
+
+ Framework GetFrameworkDirectoriesForMoniker (FrameworkMoniker moniker)
+ {
+ string dirs = String.Join (PathSeparatorAsString, new string [] {
+ Environment.GetEnvironmentVariable ("XBUILD_FRAMEWORK_FOLDERS_PATH") ?? String.Empty,
+ MSBuildUtils.RunningOnMac ? MacOSXExternalXBuildDir : String.Empty,
+ RootPath,
+ DefaultFrameworksBasePath });
+
+ string [] paths = dirs.Split (new char [] {Path.PathSeparator}, StringSplitOptions.RemoveEmptyEntries);
+ foreach (string path in paths) {
+ var framework = GetFrameworkDirectoriesForMoniker (moniker, path);
+ if (framework != null)
+ return framework;
+ }
+
+ return null;
+ }
+
+ //@base_path must be absolute
+ Framework GetFrameworkDirectoriesForMoniker (FrameworkMoniker moniker, string base_path)
+ {
+ if (String.IsNullOrEmpty (base_path)) {
+ Log.LogMessage (MessageImportance.Low, "Invalid *empty* base path, ignoring. " + Environment.StackTrace);
+ return null;
+ }
+
+ Log.LogMessage (MessageImportance.Low, "Looking for framework '{0}' in root path '{1}'",
+ moniker, base_path);
+ string framework_path = Path.Combine (base_path, Path.Combine (moniker.Identifier, moniker.Version));
+ if (!String.IsNullOrEmpty (moniker.Profile))
+ framework_path = Path.Combine (framework_path, moniker.Profile);
+
+ string redistlist_dir = Path.Combine (framework_path, "RedistList");
+ string framework_list = Path.Combine (redistlist_dir, "FrameworkList.xml");
+ if (!File.Exists (framework_list)) {
+ Log.LogMessage (MessageImportance.Low,
+ "Unable to find framework definition file '{0}' for Target Framework Moniker '{1}'",
+ framework_list, moniker);
+ return null;
+ }
+
+ Log.LogMessage (MessageImportance.Low, "Found framework definition list '{0}' for framework '{1}'",
+ framework_list, moniker);
+ XmlReader xr = XmlReader.Create (framework_list);
+ try {
+ xr.MoveToContent ();
+ if (xr.LocalName != "FileList") {
+ Log.LogMessage (MessageImportance.Low, "Invalid frameworklist '{0}', expected a 'FileList' root element.",
+ framework_list);
+ return null;
+ }
+
+ var framework = new Framework ();
+ framework.DisplayName = xr.GetAttribute ("Name");
+ string framework_dir = xr.GetAttribute ("TargetFrameworkDirectory");
+ if (String.IsNullOrEmpty (framework_dir))
+ framework_dir = Path.Combine (redistlist_dir, "..");
+ else
+ framework_dir = Path.Combine (redistlist_dir, framework_dir);
+
+ var directories = new List<string> ();
+ directories.Add (MSBuildUtils.FromMSBuildPath (framework_dir));
+
+ string include = xr.GetAttribute ("IncludeFramework");
+ if (!String.IsNullOrEmpty (include)) {
+ var included_framework = GetFrameworkDirectoriesForMoniker (new FrameworkMoniker (moniker.Identifier, include, null));
+
+ if (included_framework != null && included_framework.Directories != null)
+ directories.AddRange (included_framework.Directories);
+ }
+
+ framework.Directories = directories.ToArray ();
+
+ return framework;
+ } catch (XmlException xe) {
+ Log.LogWarning ("Error reading framework definition file '{0}': {1}", framework_list, xe.Message);
+ Log.LogMessage (MessageImportance.Low, "Error reading framework definition file '{0}': {1}", framework_list,
+ xe.ToString ());
+ return null;
+ } finally {
+ if (xr != null)
+ ((IDisposable)xr).Dispose ();
+ }
+ }
+
+ bool TryParseTargetFrameworkMoniker (string moniker_literal, out FrameworkMoniker moniker)
+ {
+ moniker = null;
+ if (String.IsNullOrEmpty (moniker_literal))
+ throw new ArgumentException ("Empty moniker string");
+
+ string [] parts = moniker_literal.Split (new char [] {','}, StringSplitOptions.RemoveEmptyEntries);
+
+ if (parts.Length < 2 || parts.Length > 3) {
+ LogInvalidMonikerError (null, moniker_literal);
+ return false;
+ }
+
+ string identifier = parts [0];
+ string version = null;
+ string profile = null;
+
+ if (!parts [1].StartsWith ("Version=")) {
+ LogInvalidMonikerError ("Invalid framework name", moniker_literal);
+ return false;
+ }
+
+ version = parts [1].Substring (8);
+ if (String.IsNullOrEmpty (version)) {
+ LogInvalidMonikerError ("Invalid framework version", moniker_literal);
+ return false;
+ }
+
+ if (parts.Length > 2) {
+ if (!parts [2].StartsWith ("Profile=")) {
+ LogInvalidMonikerError ("Invalid framework version", moniker_literal);
+ return false;
+ }
+
+ profile = parts [2].Substring (8);
+ if (String.IsNullOrEmpty (profile)) {
+ LogInvalidMonikerError ("Invalid framework profile", moniker_literal);
+ return false;
+ }
+ }
+
+ moniker = new FrameworkMoniker (identifier, version, profile);
+ return true;
+ }
+
+ void LogInvalidMonikerError (string msg, string moniker_literal)
+ {
+ if (msg != null)
+ Log.LogError ("{0} in the Target Framework Moniker '{1}'. Expected format: 'Identifier,Version=<version>[,Profile=<profile>]'. " +
+ "It should have either 2 or 3 comma separated components.", msg, moniker_literal);
+ else
+ Log.LogError ("Invalid Target Framework Moniker '{0}'. Expected format: 'Identifier,Version=<version>[,Profile=<profile>]'. " +
+ "It should have either 2 or 3 comma separated components.", moniker_literal);
+ }
+
+ [Required]
+ public string TargetFrameworkMoniker { get; set; }
+
+ public string RootPath { get; set; }
+
+ public bool BypassFrameworkInstallChecks { get; set; }
+
+ [Output]
+ public string TargetFrameworkMonikerDisplayName { get; set; }
+
+ [Output]
+ public string[] ReferenceAssemblyPaths { get; set; }
+
+ [Output]
+ public string[] FullFrameworkReferenceAssemblyPaths { get; set; }
+
+ static string DefaultFrameworksBasePath {
+ get {
+ if (framework_base_path == null) {
+ // NOTE: code from mcs/tools/gacutil/driver.cs
+ PropertyInfo gac = typeof (System.Environment).GetProperty (
+ "GacPath", BindingFlags.Static | BindingFlags.NonPublic);
+
+ if (gac != null) {
+ MethodInfo get_gac = gac.GetGetMethod (true);
+ string gac_path = (string) get_gac.Invoke (null, null);
+ framework_base_path = Path.GetFullPath (Path.Combine (
+ gac_path, Path.Combine ("..", "xbuild-frameworks")));
+ }
+ }
+ return framework_base_path;
+ }
+ }
+ }
+
+ class FrameworkMoniker {
+ public readonly string Identifier;
+ public readonly string Version;
+ public readonly string Profile;
+
+ public FrameworkMoniker (string identifier, string version, string profile)
+ {
+ this.Identifier = identifier;
+ this.Version = version;
+ this.Profile = profile;
+ }
+
+ public override string ToString ()
+ {
+ if (String.IsNullOrEmpty (Profile))
+ return String.Format ("{0},Version={1}", Identifier, Version);
+ return String.Format ("{0},Version={1},Profile={2}", Identifier, Version, Profile);
+ }
+ }
+
+ class Framework {
+ public string Moniker;
+ public string[] Directories;
+ public string DisplayName;
+ }
+}
+
+#endif
CLEAN_FILES= xbuild.exe xbuild.exe.mdb
XBUILD_DIR=.
+XBUILD_FRAMEWORKS_DIR=$(mono_libdir)/mono/xbuild-frameworks/.NETFramework/
+REDISTLIST_DIR=$(XBUILD_FRAMEWORKS_DIR)/v$(FRAMEWORK_VERSION)/RedistList
include $(XBUILD_DIR)/xbuild_targets.make
install-local: install-extras
SILVERLIGHT_DIR = $(mono_libdir)/mono/xbuild/Microsoft/Silverlight
EXTRAS_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
install-extras:
- $(MKINSTALLDIRS) $(DESTDIR)$(EXTRAS_DIR)
+ $(MKINSTALLDIRS) $(DESTDIR)$(EXTRAS_DIR) $(REDISTLIST_DIR) $(DESTDIR)$(XBUILD_FRAMEWORKS_DIR)/v3.0/RedistList
$(INSTALL_DATA) xbuild/xbuild.rsp $(DESTDIR)$(EXTRAS_DIR)
$(INSTALL_DATA) xbuild/$(FRAMEWORK_VERSION)/Microsoft.Common.tasks $(DESTDIR)$(EXTRAS_DIR)
$(INSTALL_DATA) xbuild/Microsoft.Build.xsd $(DESTDIR)$(EXTRAS_DIR)
$(INSTALL_DATA) xbuild/$(FRAMEWORK_VERSION)/Microsoft.Common.targets $(DESTDIR)$(EXTRAS_DIR)
$(INSTALL_DATA) xbuild/Microsoft.CSharp.targets $(DESTDIR)$(EXTRAS_DIR)
$(INSTALL_DATA) xbuild/Microsoft.VisualBasic.targets $(DESTDIR)$(EXTRAS_DIR)
+ $(INSTALL_DATA) xbuild/$(FRAMEWORK_VERSION)/FrameworkList.xml $(DESTDIR)$(REDISTLIST_DIR)
+ $(INSTALL_DATA) xbuild/FrameworkList-3.0.xml $(DESTDIR)$(XBUILD_FRAMEWORKS_DIR)/v3.0/RedistList/FrameworkList.xml
$(MKINSTALLDIRS) $(DESTDIR)$(EXTRAS_DIR)/MSBuild
$(INSTALL_DATA) xbuild/MSBuild/Microsoft.Build.CommonTypes.xsd $(DESTDIR)$(EXTRAS_DIR)/MSBuild
$(INSTALL_DATA) xbuild/MSBuild/Microsoft.Build.Core.xsd $(DESTDIR)$(EXTRAS_DIR)/MSBuild
xbuild/2.0/Microsoft.Common.targets \
xbuild/3.5/Microsoft.Common.targets \
xbuild/4.0/Microsoft.Common.targets \
+ xbuild/2.0/FrameworkList.xml \
+ xbuild/3.5/FrameworkList.xml \
+ xbuild/4.0/FrameworkList.xml \
+ xbuild/FrameworkList-3.0.xml \
xbuild/Microsoft.Build.xsd \
xbuild/Microsoft.CSharp.targets \
xbuild/MSBuild/Microsoft.Build.CommonTypes.xsd \
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<FileList Name=".NET Framework 2.0" TargetFrameworkDirectory="..\..\..\..\2.0">
+</FileList>
/>
</Target>
- <Target Name="GetFrameworkPaths">
+ <PropertyGroup>
+ <GetFrameworkPathsDependsOn />
+ </PropertyGroup>
+ <Target Name="GetFrameworkPaths" DependsOnTargets="$(GetFrameworkPathsDependsOn)">
<GetFrameworkPath>
<Output Condition="'$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion35Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion30Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion20Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
</GetFrameworkPath>
- <CreateProperty Value="@(_TargetFrameworkDirectories)">
+ <CreateProperty Value="@(_CombinedTargetFrameworkDirectoriesItem)">
<Output TaskParameter="Value" PropertyName="TargetFrameworkDirectory"/>
</CreateProperty>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<FileList Name=".NET Framework 3.5" TargetFrameworkDirectory="..\..\..\..\3.5" IncludeFramework="v3.0">
+</FileList>
/>
</Target>
- <Target Name="GetFrameworkPaths">
+ <PropertyGroup>
+ <GetFrameworkPathsDependsOn />
+ </PropertyGroup>
+ <Target Name="GetFrameworkPaths" DependsOnTargets="$(GetFrameworkPathsDependsOn)">
<GetFrameworkPath>
<Output Condition="'$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion35Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion30Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion20Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
</GetFrameworkPath>
- <CreateProperty Value="@(_TargetFrameworkDirectories)">
+ <CreateProperty Value="@(_CombinedTargetFrameworkDirectoriesItem)">
<Output TaskParameter="Value" PropertyName="TargetFrameworkDirectory"/>
</CreateProperty>
Condition="'$(TargetFrameworkVersion)' != 'v3.5' and '$(TargetFrameworkVersion)' != 'v3.0' and '$(TargetFrameworkVersion)' != 'v2.0'"/>
</Target>
+ <PropertyGroup>
+ <GetReferenceAssemblyPathsDependsOn />
+ </PropertyGroup>
+ <!-- Multi-targeting against "framework packs" is not supported with ToolsVersion < 4.0,
+ this target is just a place holder, can be overridden -->
+ <Target Name="GetReferenceAssemblyPaths" DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn)" />
+
<PropertyGroup>
<AllowedReferenceAssemblyFileExtensions Condition=" '$(AllowedReferenceAssemblyFileExtensions)' == '' ">
.exe;
<ResolveAssemblyReferencesDependsOn>
GetFrameworkPaths;
+ GetReferenceAssemblyPaths;
PrepareForBuild
</ResolveAssemblyReferencesDependsOn>
</PropertyGroup>
<CoreBuildDependsOn>
PrepareForBuild;
GetFrameworkPaths;
+ GetReferenceAssemblyPaths;
PreBuildEvent;
ResolveReferences;
CopyFilesMarkedCopyLocal;
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<FileList Name=".NET Framework 4" TargetFrameworkDirectory="..\..\..\..\4.0">
+</FileList>
<OutputPath Condition="'$(OutputPath)' != '' and !HasTrailingSlash('$(OutputPath)')">$(OutputPath)\</OutputPath>
<OutputPath Condition=" '$(Platform)'=='' and '$(Configuration)'=='' and '$(OutputPath)'=='' ">bin\Debug\</OutputPath>
<WarningLevel Condition="'$(WarningLevel)' == ''" >2</WarningLevel>
+
+ <TargetFrameworkIdentifier Condition="'$(TargetFrameworkIdentifier)' == ''">.NETFramework</TargetFrameworkIdentifier>
<TargetFrameworkVersion Condition="'$(TargetFrameworkVersion)' == ''">v4.0</TargetFrameworkVersion>
+
+ <TargetFrameworkMoniker Condition="'$(TargetFrameworkMoniker)' == '' and '$(TargetFrameworkProfile)' != ''">$(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion),Profile=$(TargetFrameworkProfile)</TargetFrameworkMoniker>
+ <TargetFrameworkMoniker Condition="'$(TargetFrameworkMoniker)' == ''">$(TargetFrameworkIdentifier),Version=$(TargetFrameworkVersion)</TargetFrameworkMoniker>
</PropertyGroup>
<PropertyGroup>
/>
</Target>
- <Target Name="GetFrameworkPaths">
+ <PropertyGroup>
+ <GetFrameworkPathsDependsOn />
+ </PropertyGroup>
+ <Target Name="GetFrameworkPaths"
+ Condition="'$(TargetFrameworkIdentifier)' == '' or '$(TargetFrameworkIdentifier)' == '.NETFramework'"
+ DependsOnTargets="$(GetFrameworkPathsDependsOn)">
<GetFrameworkPath>
<Output Condition="'$(TargetFrameworkVersion)' == 'v4.0'"
TaskParameter="FrameworkVersion40Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion35Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion30Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
<Output Condition="'$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'"
TaskParameter="FrameworkVersion20Path"
- ItemName="_TargetFrameworkDirectories"/>
+ ItemName="_CombinedTargetFrameworkDirectoriesItem"/>
</GetFrameworkPath>
- <CreateProperty Value="@(_TargetFrameworkDirectories)">
+ <CreateProperty Value="@(_CombinedTargetFrameworkDirectoriesItem)">
<Output TaskParameter="Value" PropertyName="TargetFrameworkDirectory"/>
</CreateProperty>
Condition="'$(TargetFrameworkVersion)' != 'v4.0' and '$(TargetFrameworkVersion)' != 'v3.5' and '$(TargetFrameworkVersion)' != 'v3.0' and '$(TargetFrameworkVersion)' != 'v2.0'"/>
</Target>
+ <PropertyGroup>
+ <GetReferenceAssemblyPathsDependsOn />
+ </PropertyGroup>
+ <Target Name="GetReferenceAssemblyPaths" DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn)">
+ <!-- in case of .NETFramework, $(TargetFrameworkDirectory) would have been set by
+ GetFrameworkPaths, if it hasn't been changed, then clear it, to avoid duplicates -->
+ <CreateProperty Value="" Condition="'@(_CombinedTargetFrameworkDirectoriesItem)' == '$(TargetFrameworkDirectory)'">
+ <Output TaskParameter="Value" PropertyName="TargetFrameworkDirectory"/>
+ </CreateProperty>
+
+ <GetReferenceAssemblyPaths
+ Condition="'$(TargetFrameworkMoniker)' != ''"
+ TargetFrameworkMoniker="$(TargetFrameworkMoniker)"
+ RootPath="$(TargetFrameworkRootPath)">
+
+ <Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/>
+ <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/>
+ <Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName"/>
+ </GetReferenceAssemblyPaths>
+
+ <CreateProperty Value="$(_TargetFrameworkDirectories);$(TargetFrameworkDirectory)">
+ <Output TaskParameter="Value" PropertyName="TargetFrameworkDirectory"/>
+ </CreateProperty>
+ </Target>
+
<PropertyGroup>
<AllowedReferenceAssemblyFileExtensions Condition=" '$(AllowedReferenceAssemblyFileExtensions)' == '' ">
.exe;
<ResolveAssemblyReferencesDependsOn>
GetFrameworkPaths;
+ GetReferenceAssemblyPaths;
PrepareForBuild
</ResolveAssemblyReferencesDependsOn>
</PropertyGroup>
<CoreBuildDependsOn>
PrepareForBuild;
GetFrameworkPaths;
+ GetReferenceAssemblyPaths;
PreBuildEvent;
ResolveReferences;
CopyFilesMarkedCopyLocal;
<UsingTask TaskName="Microsoft.Build.Tasks.GenerateResource" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<UsingTask TaskName="Microsoft.Build.Tasks.GetFrameworkPath" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<UsingTask TaskName="Microsoft.Build.Tasks.GetFrameworkSdkPath" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <UsingTask TaskName="Microsoft.Build.Tasks.GetReferenceAssemblyPaths" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<UsingTask TaskName="Microsoft.Build.Tasks.LC" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<UsingTask TaskName="Microsoft.Build.Tasks.MakeDir" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<UsingTask TaskName="Microsoft.Build.Tasks.Message" AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<FileList Name=".NET Framework 3.0" TargetFrameworkDirectory="..\..\..\..\2.0">
+</FileList>