从silverlight5开始,可以在项目设置中勾选“在浏览器内运行时需要提升的信任”来达到在浏览器内运行提权silverlight客户端的目的,在个特性很有用处。
可我使用这个功能时遇到了一个奇怪的故障:我使用visual studio 2010开发一个silverlight5项目,发现上面那个设置项不起作用,无论是否勾选它,代码中的 App.Current.HasElevatedPermissions总会返回false,那些需要提权运行的操作自然也都会失败。累死好几千脑细胞后 才发现故障原因。
当你勾选“在浏览器内运行时需要提升的信任”时,visual studio会做下面几件事情:
1、在silverlight的项目文件(.csproj)中增加内容:true
2、在项目的Properties文件夹中增加一个文件:InBrowserSettings.xml。
3、在silverlight的项目文件(.csproj)中增加内容:Properties\InBrowserSettings.xml
如果上面步骤都顺利完成就没什么问题。但如果项目的Properties文件夹正好有一个名为InBrowserSettings.xml的文件,就可能会有下面种故障发生:
1、这个文件只是在文件夹里,没包含在项目中,那么visual studio增加InBrowserSettings.xml会失败,但不会给你任何提示。结果是看似“在浏览器内运行时需要提升的信任”这一项已经被勾 选,但实际上并没有成功的提升silverlight运行权限,需要提权运行的代码都会失败,这个莫名其妙的故障搞的我焦头烂额。要解决这个故障,可以在 解决方案资源管理器中查看所有文件,把InBrowserSettings.xml手动包含在项目中,并使用记事本打开项目文件手动添加 上Properties\InBrowserSettings.xml。 如果勾选“在浏览器内运行时需要提升的信任”后发现visual studio并没在Properties文件夹中增加InBrowserSettings.xml文件,可以判断这个故障已被触发。
2、这个文件已经在这个文件夹里,而且已包含在项目中。visual studio会试图根据你的勾选来改变InBrowserSettings.xml中的内容,如果InBrowserSettings.xml文件正好处 于只读状态(比如它被签入了),那么visual studio改变文件内容时会出错,结果是visual studio干脆的崩溃退出,退出前也不会给你任何提示。所以改变“在浏览器内运行时需要提升的信任”的勾选前,如果 InBrowserSettings.xml文件已被签入或由于其它原因设了只读,请提前把它签出或去掉只读属性。