Sepertinya file ini adalah versi serial biner dari Microsoft.SqlServer.Management.UserSettings.SqlStudio
kelas yang ditentukan dalam Microsoft.SqlServer.Management.UserSettings, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 perakitan (terletak di c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll ).
Dengan sedikit keterampilan pengembangan (Visual Studio atau bahkan Powershell), Anda dapat membatalkan serialisasi file ini ke dalam kelas aslinya, menemukan entri yang ingin Anda hapus, dan membuat serial ulang file tersebut.
Ini akan memberi Anda ide (mengerjakan salinan file .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);
Setelah pertanyaan Adrian, saya mencoba ini lagi pada kotak Win7 x64 menggunakan Visual Studio 2010. Saya menemukan kesalahan yang sama, jadi, setelah menggali sedikit, saya menemukan beberapa langkah untuk menyelesaikannya.
- Tetapkan target Platform ke 'x86' di properti proyek
- tambahkan referensi ke Microsoft.SqlServer.Management.SDK.SqlStudio (di kotak saya ini ada di c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management .Sdk.SqlStudio.dll)
- menambahkan referensi ke Microsoft.SqlServer.Management.UserSettings (di direktori yang sama dengan direktori sebelumnya)
- melakukan resolusi perakitan khusus
Resolusi Majelis khusus membutuhkan sedikit waktu karena tidak jelas (bagi saya, setidaknya) mengapa CLR tidak hanya menyelesaikan Majelis dengan benar dan mengapa Visual Studio tidak mengizinkan saya untuk menambahkan referensi secara manual. Saya berbicara tentang SqlWorkbench.Interfaces.dll.
Kode yang diperbarui terlihat seperti ini:
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);
}
}