VS: Enable generation of CSharp projects without initial .cs files

fixes #17388
This commit is contained in:
Michael Stürmer 2017-11-23 14:18:23 +01:00
parent e1243a50a7
commit 8e654a3785
4 changed files with 23 additions and 6 deletions

View File

@ -66,11 +66,14 @@ static bool cmVS10IsTargetsFile(std::string const& path)
return cmSystemTools::Strucmp(ext.c_str(), ".targets") == 0; return cmSystemTools::Strucmp(ext.c_str(), ".targets") == 0;
} }
static std::string computeProjectFileExtension(cmGeneratorTarget const* t) static std::string computeProjectFileExtension(cmGeneratorTarget const* t,
const std::string& config)
{ {
std::string res; std::string res;
res = ".vcxproj"; res = ".vcxproj";
if (cmGlobalVisualStudioGenerator::TargetIsCSharpOnly(t)) { std::string lang = t->GetLinkerLanguage(config);
if (cmGlobalVisualStudioGenerator::TargetIsCSharpOnly(t) ||
lang == "CSharp") {
res = ".csproj"; res = ".csproj";
} }
return res; return res;
@ -199,8 +202,8 @@ void cmVisualStudio10TargetGenerator::Generate()
this->GeneratorTarget->GetProperty("EXTERNAL_MSPROJECT")) { this->GeneratorTarget->GetProperty("EXTERNAL_MSPROJECT")) {
return; return;
} }
this->ProjectFileExtension = this->ProjectFileExtension = computeProjectFileExtension(
computeProjectFileExtension(this->GeneratorTarget); this->GeneratorTarget, *this->Configurations.begin());
if (this->ProjectFileExtension == ".vcxproj") { if (this->ProjectFileExtension == ".vcxproj") {
this->ProjectType = vcxproj; this->ProjectType = vcxproj;
this->Managed = false; this->Managed = false;
@ -1393,7 +1396,8 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
std::string path = this->LocalGenerator->GetCurrentBinaryDirectory(); std::string path = this->LocalGenerator->GetCurrentBinaryDirectory();
path += "/"; path += "/";
path += this->Name; path += this->Name;
path += computeProjectFileExtension(this->GeneratorTarget); path += computeProjectFileExtension(this->GeneratorTarget,
*this->Configurations.begin());
path += ".filters"; path += ".filters";
cmGeneratedFileStream fout(path.c_str()); cmGeneratedFileStream fout(path.c_str());
fout.SetCopyIfDifferent(true); fout.SetCopyIfDifferent(true);
@ -3670,7 +3674,7 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
path = lg->GetCurrentBinaryDirectory(); path = lg->GetCurrentBinaryDirectory();
path += "/"; path += "/";
path += dt->GetName(); path += dt->GetName();
path += computeProjectFileExtension(dt); path += computeProjectFileExtension(dt, *this->Configurations.begin());
} }
this->ConvertToWindowsSlash(path); this->ConvertToWindowsSlash(path);
(*this->BuildFileStream) << cmVS10EscapeXML(path) << "\">\n"; (*this->BuildFileStream) << cmVS10EscapeXML(path) << "\">\n";

View File

@ -5,3 +5,4 @@ run_cmake(VsCustomProps)
run_cmake(VsDebuggerWorkingDir) run_cmake(VsDebuggerWorkingDir)
run_cmake(VsCSharpCustomTags) run_cmake(VsCSharpCustomTags)
run_cmake(VsCSharpReferenceProps) run_cmake(VsCSharpReferenceProps)
run_cmake(VsCSharpWithoutSources)

View File

@ -0,0 +1,5 @@
set(csProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.csproj")
if(NOT EXISTS "${csProjectFile}")
set(RunCMake_TEST_FAILED "Project file ${csProjectFile} does not exist.")
return()
endif()

View File

@ -0,0 +1,7 @@
enable_language(CSharp)
add_library(foo SHARED
"${CMAKE_CURRENT_LIST_FILE}")
set_target_properties(foo PROPERTIES
LINKER_LANGUAGE CSharp)