mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 20:39:01 +00:00
57 lines
No EOL
2.1 KiB
C#
57 lines
No EOL
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Microsoft.Win32;
|
|
using System.IO;
|
|
|
|
namespace Cosmos.VS.Package
|
|
{
|
|
/// <summary>
|
|
/// This class exists, because our project system cant determine whether assembly references come from stack, just by the info given by vs.
|
|
/// We detect this by:
|
|
/// + checking whether the directory the assembly is in the HKLM\Software\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\*\@ keys
|
|
/// </summary>
|
|
public static class GACDetectionUtility
|
|
{
|
|
private static List<string> mGACDirs = null;
|
|
|
|
public static bool IsAssemblyFileFromGAC(string filename)
|
|
{
|
|
if (String.IsNullOrEmpty(filename)) {
|
|
// if filename is empty, assume gac as well
|
|
return true;
|
|
}
|
|
if (mGACDirs == null)
|
|
{
|
|
#region initialize
|
|
mGACDirs = new List<string>();
|
|
using (var xRegKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx", false))
|
|
{
|
|
foreach (var xSubKeyName in xRegKey.GetSubKeyNames())
|
|
{
|
|
using (var xSubKey = xRegKey.OpenSubKey(xSubKeyName, false))
|
|
{
|
|
var xDirValue = (string)xSubKey.GetValue(null);
|
|
if (!xDirValue.EndsWith("\\"))
|
|
{
|
|
xDirValue += "\\";
|
|
}
|
|
if (!mGACDirs.Contains(xDirValue))
|
|
{
|
|
mGACDirs.Add(xDirValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
var xDirPart = Path.GetDirectoryName(filename);
|
|
if (!xDirPart.EndsWith("\\"))
|
|
{
|
|
xDirPart += "\\";
|
|
}
|
|
return mGACDirs.Contains(xDirPart);
|
|
}
|
|
}
|
|
} |