bool findRelatedFiles;
bool findSatellites;
bool findSerializationAssemblies;
- string[] installedAssemblyTables;
ITaskItem[] relatedFiles;
ITaskItem[] resolvedDependencyFiles;
ITaskItem[] resolvedFiles;
relatedFiles = tempRelatedFiles.Values.ToArray ();
resolvedDependencyFiles = tempResolvedDepFiles.Values.ToArray ();
+#if XBUILD_14
+ DependsOnSystemRuntime = resolvedDependencyFiles.Any (x => Path.GetFileName (x.ItemSpec) == "System.Runtime.dll").ToString ();
+#endif
+
tempResolvedFiles.Clear ();
tempCopyLocalFiles.Clear ();
tempSatelliteFiles.Clear ();
LogWithPrecedingNewLine (MessageImportance.Low, "Primary Reference {0}", item.ItemSpec);
ResolvedReference resolved_ref = ResolveReference (item, searchPaths, true);
+ if (resolved_ref == null)
+ resolved_ref = ResolveWithAlternateName (item, allowedAssemblyExtensions ?? default_assembly_extensions);
+
if (resolved_ref == null) {
Log.LogWarning ("Reference '{0}' not resolved", item.ItemSpec);
assembly_resolver.LogSearchLoggerMessages (MessageImportance.Normal);
}
}
+
+ ResolvedReference ResolveWithAlternateName (ITaskItem item, string[] extensions)
+ {
+ foreach (string extn in extensions) {
+ if (item.ItemSpec.EndsWith (extn)) {
+ ITaskItem altitem = new TaskItem (item.ItemSpec.Substring (0, item.ItemSpec.Length - extn.Length));
+ item.CopyMetadataTo (altitem);
+ return ResolveReference (altitem, searchPaths, true);
+ }
+ }
+ return null;
+ }
+
// Use @search_paths to resolve the reference
ResolvedReference ResolveReference (ITaskItem item, IEnumerable<string> search_paths, bool set_copy_local)
{
if (!TryGetSpecificVersionValue (item, out specific_version))
return null;
+ var spath_index = 0;
foreach (string spath in search_paths) {
+ if (string.IsNullOrEmpty (spath))
+ continue;
assembly_resolver.LogSearchMessage ("For searchpath {0}", spath);
+ // The first value of search_paths can be the parent assembly directory.
+ // In that case the value would be treated as a directory.
+ // This code checks if we should treat the value as a TargetFramework assembly.
+ // Doing so avoids CopyLocal beeing set to true.
+ if (spath_index++ == 0 && targetFrameworkDirectories != null) {
+ foreach (string fpath in targetFrameworkDirectories) {
+ if (string.IsNullOrEmpty (fpath))
+ continue;
+ if (String.Compare (
+ Path.GetFullPath (spath).TrimEnd (Path.DirectorySeparatorChar),
+ Path.GetFullPath (fpath).TrimEnd (Path.DirectorySeparatorChar),
+ StringComparison.InvariantCulture) != 0)
+ continue;
+
+ resolved = assembly_resolver.FindInTargetFramework (item,
+ fpath, specific_version);
+
+ break;
+ }
+
+ if (resolved != null)
+ break;
+ }
+
if (String.Compare (spath, "{HintPathFromItem}") == 0) {
resolved = assembly_resolver.ResolveHintPathReference (item, specific_version);
} else if (String.Compare (spath, "{TargetFrameworkDirectory}") == 0) {
public ITaskItem[] CopyLocalFiles {
get { return copyLocalFiles; }
}
+
+#if XBUILD_14
+ [Output]
+ public string DependsOnSystemRuntime {
+ get; private set;
+ }
+#endif
[Output]
public ITaskItem[] FilesWritten {
get { return findSerializationAssemblies; }
set { findSerializationAssemblies = value; }
}
-/*
- public string[] InstalledAssemblyTables {
- get { return installedAssemblyTables; }
- set { installedAssemblyTables = value; }
- }
-*/
+
+ public
+ ITaskItem[]
+ InstalledAssemblyTables { get; set; }
+
[Output]
public ITaskItem[] RelatedFiles {
get { return relatedFiles; }
get { return suggestedRedirects; }
}
-#if NET_4_0
public string TargetFrameworkMoniker { get; set; }
public string TargetFrameworkMonikerDisplayName { get; set; }
-#endif
public string TargetFrameworkVersion { get; set; }