mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 07:08:38 -05:00
Merge topic 'dotnet_hint_references'
55da7e50 VS: add support for .NET references with hint paths
This commit is contained in:
@@ -274,7 +274,9 @@ Properties on Targets
|
||||
/prop_tgt/VS_CONFIGURATION_TYPE
|
||||
/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY
|
||||
/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION
|
||||
/prop_tgt/VS_DOTNET_REFERENCE_refname
|
||||
/prop_tgt/VS_DOTNET_REFERENCES
|
||||
/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL
|
||||
/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION
|
||||
/prop_tgt/VS_GLOBAL_KEYWORD
|
||||
/prop_tgt/VS_GLOBAL_PROJECT_TYPES
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
VS_DOTNET_REFERENCES_COPY_LOCAL
|
||||
-------------------------------
|
||||
|
||||
Sets the **Copy Local** property for all .NET hint references in the target
|
||||
|
||||
Boolean property to enable/disable copying of .NET hint references to
|
||||
output directory. The default is ``ON``.
|
||||
@@ -0,0 +1,12 @@
|
||||
VS_DOTNET_REFERENCE_<refname>
|
||||
-----------------------------
|
||||
|
||||
Visual Studio managed project .NET reference with name ``<refname>``
|
||||
and hint path.
|
||||
|
||||
Adds one .NET reference to generated Visual Studio project. The
|
||||
reference will have the name ``<refname>`` and will point to the
|
||||
assembly given as value of the property.
|
||||
|
||||
See also :prop_tgt:`VS_DOTNET_REFERENCES` and
|
||||
:prop_tgt:`VS_DOTNET_REFERENCES_COPY_LOCAL`
|
||||
@@ -0,0 +1,13 @@
|
||||
vs-dotnet-references
|
||||
--------------------
|
||||
|
||||
* The :ref:`Visual Studio Generators` for VS 2010 and above can
|
||||
now handle .NET references with hintpaths. For this the new
|
||||
target property group :prop_tgt:`VS_DOTNET_REFERENCE_<refname>`
|
||||
was introduced. The ``<refname>`` part of the property name will
|
||||
be the name of the reference, the value will be the actual
|
||||
path to the assembly.
|
||||
|
||||
* Copying of referenced assemblies to the output directory can
|
||||
now be disabled using the target property
|
||||
:prop_tgt:`VS_DOTNET_REFERENCES_COPY_LOCAL`.
|
||||
@@ -429,28 +429,81 @@ 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);
|
||||
}
|
||||
if (!references.empty()) {
|
||||
cmPropertyMap const& props = this->GeneratorTarget->Target->GetProperties();
|
||||
for (cmPropertyMap::const_iterator i = props.begin(); i != props.end();
|
||||
++i) {
|
||||
if (i->first.find("VS_DOTNET_REFERENCE_") == 0) {
|
||||
std::string name = i->first.substr(20);
|
||||
if (name != "") {
|
||||
std::string path = i->second.GetValue();
|
||||
if (!cmsys::SystemTools::FileIsFullPath(path)) {
|
||||
path = std::string(this->GeneratorTarget->Target->GetMakefile()
|
||||
->GetCurrentSourceDirectory()) +
|
||||
"/" + path;
|
||||
}
|
||||
this->ConvertToWindowsSlash(path);
|
||||
hintReferences.push_back(HintReference(name, path));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!references.empty() || !hintReferences.empty()) {
|
||||
this->WriteString("<ItemGroup>\n", 1);
|
||||
for (std::vector<std::string>::iterator ri = references.begin();
|
||||
ri != references.end(); ++ri) {
|
||||
this->WriteString("<Reference Include=\"", 2);
|
||||
(*this->BuildFileStream) << cmVS10EscapeXML(*ri) << "\">\n";
|
||||
this->WriteString("<CopyLocalSatelliteAssemblies>true"
|
||||
"</CopyLocalSatelliteAssemblies>\n",
|
||||
3);
|
||||
this->WriteString("<ReferenceOutputAssembly>true"
|
||||
"</ReferenceOutputAssembly>\n",
|
||||
3);
|
||||
this->WriteString("</Reference>\n", 2);
|
||||
// if the entry from VS_DOTNET_REFERENCES is an existing file, generate
|
||||
// a new hint-reference and name it from the filename
|
||||
if (cmsys::SystemTools::FileExists(*ri, true)) {
|
||||
std::string name =
|
||||
cmsys::SystemTools::GetFilenameWithoutExtension(*ri);
|
||||
std::string path = *ri;
|
||||
this->ConvertToWindowsSlash(path);
|
||||
hintReferences.push_back(HintReference(name, path));
|
||||
} else {
|
||||
this->WriteDotNetReference(*ri, "");
|
||||
}
|
||||
}
|
||||
for (std::vector<std::pair<std::string, std::string> >::const_iterator i =
|
||||
hintReferences.begin();
|
||||
i != hintReferences.end(); ++i) {
|
||||
this->WriteDotNetReference(i->first, i->second);
|
||||
}
|
||||
this->WriteString("</ItemGroup>\n", 1);
|
||||
}
|
||||
}
|
||||
|
||||
void cmVisualStudio10TargetGenerator::WriteDotNetReference(
|
||||
std::string const& ref, std::string const& hint)
|
||||
{
|
||||
this->WriteString("<Reference Include=\"", 2);
|
||||
(*this->BuildFileStream) << cmVS10EscapeXML(ref) << "\">\n";
|
||||
this->WriteString("<CopyLocalSatelliteAssemblies>true"
|
||||
"</CopyLocalSatelliteAssemblies>\n",
|
||||
3);
|
||||
this->WriteString("<ReferenceOutputAssembly>true"
|
||||
"</ReferenceOutputAssembly>\n",
|
||||
3);
|
||||
if (!hint.empty()) {
|
||||
const char* privateReference = "True";
|
||||
if (const char* value = this->GeneratorTarget->GetProperty(
|
||||
"VS_DOTNET_REFERENCES_COPY_LOCAL")) {
|
||||
if (cmSystemTools::IsOff(value)) {
|
||||
privateReference = "False";
|
||||
}
|
||||
}
|
||||
this->WriteString("<Private>", 3);
|
||||
(*this->BuildFileStream) << privateReference << "</Private>\n";
|
||||
this->WriteString("<HintPath>", 3);
|
||||
(*this->BuildFileStream) << hint << "</HintPath>\n";
|
||||
}
|
||||
this->WriteString("</Reference>\n", 2);
|
||||
}
|
||||
|
||||
void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup()
|
||||
{
|
||||
std::vector<cmSourceFile const*> resxObjs;
|
||||
|
||||
@@ -65,6 +65,7 @@ private:
|
||||
std::vector<cmSourceFile const*> const&);
|
||||
void WriteAllSources();
|
||||
void WriteDotNetReferences();
|
||||
void WriteDotNetReference(std::string const& ref, std::string const& hint);
|
||||
void WriteEmbeddedResourceGroup();
|
||||
void WriteWinRTReferences();
|
||||
void WriteWinRTPackageCertificateKeyFile();
|
||||
|
||||
Reference in New Issue
Block a user