2016-03-15 70 views
0

是否可以使用WIX自定義操作中的DacServices將現有數據庫註冊爲數據層應用程序?如何使用DacServices從WIX自定義操作將數據庫註冊爲DAC?

我試圖通過加載一個DACPAC DacPackage class然後註冊它與DacServices.Register method

var dacPackage = DacPackage.Load(filePath); 
var dacServices = new DacServices(connectionString); 
dacServices.Register(
    "databaseName", 
    DacSchemaModelStorageType.File, 
    "applicationName", 
    new Version(1, 0, 0, 0)); 

的代碼工作正常,當我在一個控制檯應用程序運行,而不是在爲維克斯自定義操作運行。相反,我得到一個IsolatedStorageException此消息:

無法確定域的

例外文件似乎表明,這個問題是「缺少證據」

隔離存儲身份需要證據(關於程序集及其來源的信息)以確定代碼的身份並將其連接到正確的關聯文件空間。沒有這些信息,不能使用獨立存儲。

我不明白這是什麼或如何在我的情況下控制它。

堆棧跟蹤很長,所以我把它放在this paste bin

編輯:

這裏是CustomAction.config文件的要求:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" /> 
     <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 
+1

DTF(管理自定義操作)不幕後有趣的事情,使一切工作,這可能是在.NET環境不正確爲此設置。你能提供你的CustomAction.config文件嗎? –

+0

@SeanHall我已經將CustomAction.config文件添加到問題中。 – andrej351

回答

2

我在https://github.com/wixtoolset/issues/issues/5240提交的這個錯誤。您可以通過創建自己的具有所需證據的AppDomain並在正確創建的AppDomain中運行代碼來解決此問題。

使用從this answer代碼,此解決辦法爲我工作:

// This throws an IsolatedStorageException, since we haven't fixed the evidence yet. 
//System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForDomain(); 

// Create a new Evidence that include the MyComputer zone 
var replacementEvidence = new System.Security.Policy.Evidence(); 
replacementEvidence.AddHostEvidence(new System.Security.Policy.Zone(System.Security.SecurityZone.MyComputer)); 

// Replace the current AppDomain's evidence using reflection 
var currentAppDomain = System.Threading.Thread.GetDomain(); 
var securityIdentityField = currentAppDomain.GetType().GetField("_SecurityIdentity", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
securityIdentityField.SetValue(currentAppDomain,replacementEvidence); 

// Now it works. 
System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForDomain(); 
+0

感謝,訂閱。從你的評論和提及特定的源文件看來,這似乎是一個真正的問題,所以希望能夠解決。由於我們繼續前進,並且對AppDomains和Evidence不熟悉,我們不會嘗試解決方法。如果有人這樣做,會很高興看到他們是如何做到的。 – andrej351