2016-01-29 17 views
4

當我使用LINQPad的遺留庫時,我得到了NotSupportedException。我發現這個例外是由於在.NET Framework中棄用Code Access Security如何爲LINQPad設置NetFx40_LegacySecurityPolicy?

https://msdn.microsoft.com/en-us/library/ee191568(v=vs.110).aspx

所以我根據MSDN文章添加<NetFx40_LegacySecurityPolicy>LINQPad.config文件,但它仍然會導致Exception。將配置元素添加到LINQPad.UserQuery.exe.config可以幫助我,但它似乎在啓動LINQPad時重新生成。

是否有其他方法可以爲LINQPad添加配置元素?

(爲什麼不LINQPad.config此元素的工作...)

例(導致相同Exception):

// Add reference for System.Security.dll and import namespace System.Security. 
new HostSecurityManager().DomainPolicy 
+0

您是否按照需要將它置於'configuration \ runtime'下?如[此處]所示(https://msdn.microsoft.com/en-us/library/dd409253(v = vs.110).aspx) –

+0

@Tamir yes。我檢查它在'LINQPad.UserQuery.exe.config'的相同位置工作。 – unarist

+0

試着把它放在'LINQPad.exe.config'裏面,而不是在'LINQPad.config'裏面。我不記得LINQPad是否爲查詢開啓了一個新的進程,如果沒有的話 - 這個安全限制可能是因爲你受限制的進程是LINQPad本身。 –

回答

1

NetFx40_LegacySecurityPolicy是不尋常的,因爲它必須來自該進程的配置文件,而不是應用程序域。

如果您在LINQPad中禁用進程隔離,則解決方法是將該設置放入LINQPad.exe.config而不是LINQPad.config

此解決方法不支持啓用進程隔離,但是這將在LINQPad更新(v5.05.04)中解決。測試版將很快發佈。

+0

我檢查了當前的測試版(v5.06.1)和'LINQPad.exe中的設置。config'與進程隔離一起工作。謝謝! – unarist

1

由於LINQPad runs used to run each query in a new AppDomain and not in a new Process,我假設 '限制' 計劃是LINQPad.exe本身: (我不知道其中LINQPad版本使用,因此那是一個可能的解決方案。)

LINQPad AppDomains

LINQPadLINQPad.exe.config加載自己的配置,嘗試添加所需的配置給它,而不是LINQPad.config文件 - 這是查詢配置文件。

此外,還要確保你有一個right configuration hierarchy

<configuration> 
    <runtime> 
     <NetFx40_LegacySecurityPolicy enabled="true|false"/> 
    </runtime> 
</configuration> 
+0

提問者沒有說他使用了哪個版本的「LINQPad」,事實上它解決了他的問題... –

+0

我使用LINQPad5,但最新版本的LINQPad4也使用LINQPad.UserQuery.exe。因此,如果不禁用「LINQPad.UserQuery.exe」,您的解決方案將無法正常工作。但是,爲什麼我應該將選項放在'LINQPad.exe.config'而不是'LINQPad.config'中。幫助我。謝謝! – unarist