준비물: MSBuildTasks
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="BuildTool\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<!-- 테스트용 DSN 정보 -->
<ItemGroup>
<DSNToCreate Include="Item">
<Name>DSN_NAME1</Name>
<Server>DatabaseServer1</Server>
<Database>InitialCatalog1</Database>
<Description>ODBC DSN for the Database: DatabaseServer1</Description>
<Driver>SQL Native Client</Driver>
<LastUser>sa</LastUser>
<Trusted_Connection>Yes</Trusted_Connection>
</DSNToCreate>
<DSNToCreate Include="Item">
<Name>DSN_NAME2</Name>
<Server>DatabaseServer2</Server>
<Database>InitialCatalog2</Database>
<Description>ODBC DSN for the Database: DatabaseServer2</Description>
<Driver>SQL Native Client</Driver>
<LastUser>sa</LastUser>
<Trusted_Connection>Yes</Trusted_Connection>
</DSNToCreate>
</ItemGroup>
<!-- DSN 삭제 -->
<PropertyGroup>
<DelDSN>
<![CDATA[
public static string ScriptMain() {
System.Collections.Specialized.StringCollection dsnNames = new System.Collections.Specialized.StringCollection();
dsnNames.Add("DSN_NAME1");
dsnNames.Add("DSN_NAME2");
string returnMsg = string.Empty;
using (Microsoft.Win32.RegistryKey OurKey = Microsoft.Win32.Registry.LocalMachine)
{
foreach (string dsnName in dsnNames)
{
using (Microsoft.Win32.RegistryKey dataSourcesKey = OurKey.OpenSubKey(@"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\", true))
{
try
{
dataSourcesKey.DeleteValue(dsnName);
}
catch (Exception ex)
{
returnMsg += Environment.NewLine;
returnMsg += "While deleting a registry value " + @"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\" + dsnName;
returnMsg += Environment.NewLine;
returnMsg += ex.ToString();
returnMsg += Environment.NewLine;
}
}
try
{
OurKey.DeleteSubKeyTree(@"SOFTWARE\ODBC\ODBC.INI\" + dsnName);
}
catch (Exception ex)
{
returnMsg += Environment.NewLine;
returnMsg += "While deleting a registry key " + @"SOFTWARE\ODBC\ODBC.INI\" + dsnName;
returnMsg += Environment.NewLine;
returnMsg += ex.ToString();
returnMsg += Environment.NewLine;
}
}
}
return returnMsg;
}
]]>
</DelDSN>
</PropertyGroup>
<!-- 깔끔하게 정리 -->
<Target Name="Clean">
<Script Language="C#" Code="$(DelDSN)" Imports="System">
<Output TaskParameter="ReturnValue" PropertyName="DelDSNResult" />
</Script>
<Message Text="DSN deletion: $(DelDSNResult)" />
</Target>
<!-- 테스트용 DSN 생성 -->
<Target Name="CreateDSN">
<RegistryRead
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\%(DSNToCreate.Driver)"
ValueName="Driver">
<Output TaskParameter="Value" PropertyName="DriverPath" />
</RegistryRead>
<Message Text="DriverPath: $(DriverPath)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\%(DSNToCreate.Name)"
ValueName="Server"
Value="%(DSNToCreate.Server)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\%(DSNToCreate.Name)"
ValueName="Database"
Value="%(DSNToCreate.Database)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\%(DSNToCreate.Name)"
ValueName="Description"
Value="%(DSNToCreate.Description)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\%(DSNToCreate.Name)"
ValueName="Driver"
Value="$(DriverPath)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\%(DSNToCreate.Name)"
ValueName="LastUser"
Value="%(DSNToCreate.LastUser)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\%(DSNToCreate.Name)"
ValueName="Trusted_Connection"
Value="%(DSNToCreate.Trusted_Connection)" />
<RegistryWrite
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\"
ValueName="%(DSNToCreate.Name)"
Value="%(DSNToCreate.Driver)" />
</Target>
</Project>
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.