2010-05-28 82 views
8

我有一個在32位系統上正常工作但在XP 64位系統上失敗的應用程序。我已經跟蹤它在我的app.config這樣定義的連接字符串:app.config和64位機器

<connectionStrings> 
    <clear/> 
    <add name="IFDSConnectionString" 
     connectionString="Data Source=fdsdata;Initial Catalog=IFDS; 
     Trusted_Connection=true;Connect Timeout=0" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

當我嘗試引用它在代碼中,我發現ConfigurationManager.ConnectionStrings集合只包含從該LocalSqlServer連接字符串machine.config文件,而不是我的自定義字符串。

另一個奇怪的是,當我從Visual Studio運行應用程序時,它工作正常。只有當我用完發佈文件夾時,連接字符串纔會被定義。應用程序的.exe.config文件與.exe文件一起位於發佈文件夾中,並且是最新的。

+0

你有沒有試過在一個真正的基本控制檯應用程序中複製這個?我使用Win7 64位,並沒有注意到這樣的事情。所以也許它是特定於XP的,或者它不是64位機器上的app.config。 – 2010-05-28 17:10:30

回答

1

將連接字符串添加到devenv.exe.config文件。

這是位於

Visual Studio 2010中

$$ INSTALLLOCATION $$ \微軟的Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.config

Visual Studio 2008的

$$ InstallLocation $$ \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ devenv.exe.config

3

我最終在這裏找到了解釋:http://social.msdn.microsoft.com/forums/en-US/clr/thread/c25cd2c0-653d-4890-97b8-d2c9ceda2949/

總之,當使用應用程序的清單文件時會發生此行爲。在這種情況下,框架查找application_name.config,而不是application_name.exe.config。一種解決方法是在構建應用程序後重命名配置文件。另一個是將assemblyIdentity節點添加到清單。在我自己的情況下,我能夠簡單地刪除清單文件,並且生活再次很好。