Cuối cùng tôi đã viết một lớp học để phát hiện các phiên bản Visual Studio. Kiểm tra và làm việc:
public static class VSVersion
{
static readonly object mLock = new object();
static Version mVsVersion;
static Version mOsVersion;
public static Version FullVersion
{
get
{
lock (mLock)
{
if (mVsVersion == null)
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "msenv.dll");
if (File.Exists(path))
{
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(path);
string verName = fvi.ProductVersion;
for (int i = 0; i < verName.Length; i++)
{
if (!char.IsDigit(verName, i) && verName[i] != '.')
{
verName = verName.Substring(0, i);
break;
}
}
mVsVersion = new Version(verName);
}
else
mVsVersion = new Version(0, 0); // Not running inside Visual Studio!
}
}
return mVsVersion;
}
}
public static Version OSVersion
{
get { return mOsVersion ?? (mOsVersion = Environment.OSVersion.Version); }
}
public static bool VS2012OrLater
{
get { return FullVersion >= new Version(11, 0); }
}
public static bool VS2010OrLater
{
get { return FullVersion >= new Version(10, 0); }
}
public static bool VS2008OrOlder
{
get { return FullVersion < new Version(9, 0); }
}
public static bool VS2005
{
get { return FullVersion.Major == 8; }
}
public static bool VS2008
{
get { return FullVersion.Major == 9; }
}
public static bool VS2010
{
get { return FullVersion.Major == 10; }
}
public static bool VS2012
{
get { return FullVersion.Major == 11; }
}
}
Nguồn
2012-06-19 08:32:58
Giải pháp này có ý nghĩa so với DTE.Version, vì sớm hay muộn DTE sẽ không được chấp nhận từ VS API (cùng một cách công nghệ VS addin đã không được chấp nhận). Mã đề xuất có thể được tăng cường bằng cách sử dụng fvi.FileMajorPart và fvi.FileMinorPart trả về hai số nguyên, điều này tránh phần phân tích cú pháp chuỗi trong mã được đề xuất. –
+1 vì mã này truy lục phiên bản đầy đủ (ví dụ: 11.0.61030.00) có thể được sử dụng để suy ra mức cập nhật của VS. DTE.Version chỉ trả về ví dụ: "11.0" –
Bất kỳ lý do nào để thích msenv.dll hơn devenv.exe? Chỉ tò mò thôi. Ngoài ra: tự hỏi nếu có thực sự khóa cần thiết? –