Parece que este archivo es una versión serializada binario de la clase Microsoft.SqlServer.Management.UserSettings.SqlStudio
se define en las Microsoft.SqlServer.Management.UserSettings, versión = 10.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91 de ensamblaje (ubicado en c: \ Archivos de programa \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ Microsoft.SqlServer.Management.UserSettings.dll).
Con un poco de habilidad de desarrollo (Visual Studio o incluso Powershell) puede deserializar este archivo en la clase original, encontrar las entradas que desea eliminar y volver a serializar el archivo de nuevo.
Esto debe darle la idea (que trabaja en una copia del archivo .bin) ...
var binaryFormatter = new BinaryFormatter();
var inStream = new MemoryStream(File.ReadAllBytes(@"c:\temp\SqlStudio.bin"));
var settings = (SqlStudio) binaryFormatter.Deserialize(inStream);
foreach (var pair in settings.SSMS.ConnectionOptions.ServerTypes)
{
ServerTypeItem serverTypeItem = pair.Value;
List<ServerConnectionItem> toRemove = new List<ServerConnectionItem>();
foreach (ServerConnectionItem server in serverTypeItem.Servers)
{
if (server.Instance != "the server you want to remove")
{
continue;
}
toRemove.Add(server);
}
foreach (ServerConnectionItem serverConnectionItem in toRemove)
{
serverTypeItem.Servers.RemoveItem(serverConnectionItem);
}
}
MemoryStream outStream = new MemoryStream();
binaryFormatter.Serialize(outStream, settings);
byte[] outBytes = new byte[outStream.Length];
outStream.Position = 0;
outStream.Read(outBytes, 0, outBytes.Length);
File.WriteAllBytes(@"c:\temp\SqlStudio.bin", outBytes);
Después de la pregunta de Adrian, yo probamos este nuevo en una caja x64 Win7 utilizando Visual Studio 2010. Me Encontré el mismo error así que, después de cavar un poco, descubrí que tomó varios pasos para resolverlo.
- fijado el objetivo de la plataforma de 'x 86' en las propiedades del proyecto
- añadir una referencia a Microsoft.SqlServer.Management.SDK.SqlStudio (en mi caja de esto fue en c: \ Archivos de programa \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ Microsoft.SqlServer.Management.Sdk.SqlStudio.dll)
- agregue una referencia a Microsoft.SqlServer.Management.UserSettings (en el mismo directorio en el anterior)
- realizar la resolución de ensamblado personalizado
La resolución ensamblado personalizado tomó un poco de hacer, ya que no era obvio (para mí, al menos) por qué el wouldn CLR Simplemente resuelvo el ensamblaje correctamente y por qué Visual Studio no me permitió agregar la referencia manualmente. Estoy hablando de SqlWorkbench.Interfaces.dll.
El código actualizado es así:
internal class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
var binaryFormatter = new BinaryFormatter();
var inStream = new MemoryStream(File.ReadAllBytes(@"c:\temp\SqlStudio.bin"));
var settings = (SqlStudio) binaryFormatter.Deserialize(inStream);
foreach (var pair in settings.SSMS.ConnectionOptions.ServerTypes)
{
ServerTypeItem serverTypeItem = pair.Value;
List<ServerConnectionItem> toRemove = new List<ServerConnectionItem>();
foreach (ServerConnectionItem server in serverTypeItem.Servers)
{
if (server.Instance != "the server you want to remove")
{
continue;
}
toRemove.Add(server);
}
foreach (ServerConnectionItem serverConnectionItem in toRemove)
{
serverTypeItem.Servers.RemoveItem(serverConnectionItem);
}
}
MemoryStream outStream = new MemoryStream();
binaryFormatter.Serialize(outStream, settings);
byte[] outBytes = new byte[outStream.Length];
outStream.Position = 0;
outStream.Read(outBytes, 0, outBytes.Length);
File.WriteAllBytes(@"c:\temp\SqlStudio.bin", outBytes);
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Debug.WriteLine(args.Name);
if (args.Name.StartsWith("SqlWorkbench.Interfaces"))
{
return Assembly.LoadFrom(@"C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlWorkbench.Interfaces.dll");
}
return Assembly.Load(args.Name);
}
}
¿No pudo Microsoft haberlo convertido en un archivo XML? ¿Qué tan difícil podría ser? :( Bueno, dado que perderé * cada * personalización y * todos * elementos, creo que ya no quiero hacerlo más –
Sí, apesta. Busqué información sobre el formato/editabilidad de SqlStudio.bin , pero no pude encontrar nada. Por desgracia, –
Para referencias futuras a esta pregunta, edité su respuesta para que el lector sepa que no se puede hacer, luego ofrece la solución alternativa. Y luego la acepté. –