| 
					
				 | 
			
			
				@@ -319,6 +319,8 @@ void cmVisualStudio10TargetGenerator::Generate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                              this->Name.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   this->GeneratorTarget->Target->SetProperty( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     "GENERATOR_FILE_NAME_EXT", this->ProjectFileExtension.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->DotNetHintReferences.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->AdditionalUsingDirectories.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (this->GeneratorTarget->GetType() <= cmStateEnums::OBJECT_LIBRARY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!this->ComputeClOptions()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -679,8 +681,6 @@ void cmVisualStudio10TargetGenerator::Generate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void cmVisualStudio10TargetGenerator::WriteDotNetReferences() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   std::vector<std::string> references; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef std::pair<std::string, std::string> HintReference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  std::vector<HintReference> hintReferences; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (const char* vsDotNetReferences = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this->GeneratorTarget->GetProperty("VS_DOTNET_REFERENCES")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cmSystemTools::ExpandListArgument(vsDotNetReferences, references); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -696,11 +696,12 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferences() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             "/" + path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ConvertToWindowsSlash(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        hintReferences.push_back(HintReference(name, path)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this->DotNetHintReferences[""].push_back( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          DotNetHintReference(name, path)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (!references.empty() || !hintReferences.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!references.empty() || !this->DotNetHintReferences.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this->WriteString("<ItemGroup>\n", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (std::string const& ri : references) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // if the entry from VS_DOTNET_REFERENCES is an existing file, generate 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -709,13 +710,18 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferences() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         std::string name = cmsys::SystemTools::GetFilenameWithoutExtension(ri); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         std::string path = ri; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ConvertToWindowsSlash(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        hintReferences.push_back(HintReference(name, path)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this->DotNetHintReferences[""].push_back( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          DotNetHintReference(name, path)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this->WriteDotNetReference(ri, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (const auto& i : hintReferences) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      this->WriteDotNetReference(i.first, i.second, ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const auto& h : this->DotNetHintReferences) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // DotNetHintReferences is also populated from AddLibraries(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // The configuration specific hint references are added there. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      for (const auto& i : h.second) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this->WriteDotNetReference(i.first, i.second, h.first); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this->WriteString("</ItemGroup>\n", 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2625,6 +2631,18 @@ void cmVisualStudio10TargetGenerator::WriteClOptions( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ConvertToWindowsSlash(pdb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       this->WriteElemEscapeXML("ProgramDataBaseFileName", pdb, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // add AdditionalUsingDirectories 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (this->AdditionalUsingDirectories.count(configName) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      std::string dirs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      for (auto u : this->AdditionalUsingDirectories[configName]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!dirs.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          dirs.append(";"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dirs.append(u); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this->WriteElemEscapeXML("AdditionalUsingDirectories", dirs, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   this->WriteString("</ClCompile>\n", 2); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3496,6 +3514,32 @@ void cmVisualStudio10TargetGenerator::AddLibraries( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (cmComputeLinkInformation::Item const& l : libs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (l.Target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       auto managedType = l.Target->GetManagedType(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (managedType != cmGeneratorTarget::ManagedType::Native && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this->GeneratorTarget->GetManagedType(config) != 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cmGeneratorTarget::ManagedType::Native && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          l.Target->IsImported()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        auto location = l.Target->GetFullPath(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!location.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ConvertToWindowsSlash(location); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          switch (this->ProjectType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case csproj: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // If the target we want to "link" to is an imported managed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // target and this is a C# project, we add a hint reference. This 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // reference is written to project file in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // WriteDotNetReferences(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this->DotNetHintReferences[config].push_back( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DotNetHintReference(l.Target->GetName(), location)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case vcxproj: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // Add path of assembly to list of using-directories, so the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // managed assembly can be used by '#using <assembly.dll>' in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // code. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this->AdditionalUsingDirectories[config].insert( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cmSystemTools::GetFilenamePath(location)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // Do not allow C# targets to be added to the LIB listing. LIB files are 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // used for linking C++ dependencies. C# libraries do not have lib files. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // Instead, they compile down to C# reference libraries (DLL files). The 
			 |