diff --git a/src/actions/vstudio/_vstudio.lua b/src/actions/vstudio/_vstudio.lua index cd60b28a..42e4ec7e 100644 --- a/src/actions/vstudio/_vstudio.lua +++ b/src/actions/vstudio/_vstudio.lua @@ -12,6 +12,22 @@ local config = p.config +-- +-- All valid .NET Framework versions, from oldest to newest. +-- + + vstudio.frameworkVersions = + { + "net10", + "net11", + "net20", + "net30", + "net35", + "net40", + "net45", + } + + -- -- Mapping tables from Premake systems and architectures to Visual Studio -- identifiers. Broken out as tables so new values can be pushed in by diff --git a/src/actions/vstudio/vs2005_csproj.lua b/src/actions/vstudio/vs2005_csproj.lua index d80d9861..efcb10e0 100644 --- a/src/actions/vstudio/vs2005_csproj.lua +++ b/src/actions/vstudio/vs2005_csproj.lua @@ -329,33 +329,42 @@ local targetFramework = vstudio.nuget2010.packageFramework(prj.solution, package) - -- Strip off the "net" prefix so we can compare it. + -- We need to write HintPaths for all supported framework + -- versions. The last HintPath will override any previous + -- HintPaths (if the condition is met that is). - local targetFrameworkVersion = tonumber(targetFramework:sub(4)) + local function writeHintPath(frameworkVersion) + local assembly = vstudio.path( + prj, + p.filename( + prj.solution, + string.format( + "packages\\%s\\lib\\%s\\%s.dll", + vstudio.nuget2010.packageName(package), + frameworkVersion, + vstudio.nuget2010.packageId(package) + ) + ) + ) - -- If the package doesn't support the target framework, we - -- need to check if it exists in the folders for any of the - -- previous framework versions. The last HintPath will - -- override any previous HintPaths (if the condition is met - -- that is). - - -- This is kind of shit because we will need to add new - -- versions of the .NET Framework here. - - local frameworks = {} - if targetFrameworkVersion >= 11 then table.insert(frameworks, "net10") end - if targetFrameworkVersion >= 20 then table.insert(frameworks, "net11") end - if targetFrameworkVersion >= 30 then table.insert(frameworks, "net20") end - if targetFrameworkVersion >= 35 then table.insert(frameworks, "net30") end - if targetFrameworkVersion >= 40 then table.insert(frameworks, "net35") end - if targetFrameworkVersion >= 45 then table.insert(frameworks, "net40") end - table.insert(frameworks, targetFramework) - - for _, framework in pairs(frameworks) do - local assembly = vstudio.path(prj, p.filename(prj.solution, string.format("packages\\%s\\lib\\%s\\%s.dll", vstudio.nuget2010.packageName(package), framework, vstudio.nuget2010.packageId(package)))) _x(3, '%s', assembly, assembly) end + for k, frameworkVersion in ipairs(vstudio.frameworkVersions) do + if k == #vstudio.frameworkVersions then + break + end + + local nextFrameworkVersion = vstudio.frameworkVersions[k + 1] + + -- Compare the versions with the "net" prefix stripped. + if tonumber(targetFramework:sub(4)) >= tonumber(nextFrameworkVersion:sub(4)) then + writeHintPath(frameworkVersion) + end + end + + writeHintPath(targetFramework) + _p(3, 'True') _p(2, '') end