Почему мое приложение .NET требует полного доверия?

На основе этого ответа о том, как настроить конфигурацию вкладки ноутбука, вы можете добавить информацию о шрифте в созданную тему, например, чтобы получить нужный тип шрифтов:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

s = ttk.Style()
s.theme_create( "MyStyle", parent="alt", settings={
        "TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0] } },
        "TNotebook.Tab": {"configure": {"padding": [100, 10],
                                        "font" : ('URW Gothic L', '11', 'bold')},}})
s.theme_use("MyStyle")

notebook = ttk.Notebook(root)

f1 = tk.Frame(notebook, bg='red', width=200, height=200)
f2 = tk.Frame(notebook, bg='blue', width=200, height=200)

notebook.add(f1, text="frame 1" )
notebook.add(f2, text="frame 2 longer" )

notebook.grid(row=0, column=0, sticky="nw")
root.mainloop()

[ 117] Другой подход заключается в прямой настройке стиля вкладок в блокноте. Смотрите ниже код.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

s = ttk.Style()
s.configure('TNotebook.Tab', font=('URW Gothic L','11','bold') )

notebook = ttk.Notebook(root)

f1 = tk.Frame(notebook, bg='red', width=200, height=200)
f2 = tk.Frame(notebook, bg='blue', width=200, height=200)

notebook.add(f1, text="frame 1" )
notebook.add(f2, text="frame 2 longer" )

notebook.grid(row=0, column=0, sticky="nw")
root.mainloop()

Вы должны заметить разницу между использованием s.configure('TNotebook.Tab', font=('URW Gothic L','11','bold') ) и s.configure('TNotebook', font=('URW Gothic L','11','bold') ). Первый изменяет шрифт виджета «Вкладка», а второй - шрифт.

Вы используете первый подход, если настраиваете много аспектов вкладки. Вы используете второй подход, если хотите просто изменить шрифт на вкладке «Блокнот».

Использование s.configure('.', font=('URW Gothic L','11','bold') ) означает, что шрифт всех виджетов ttk будет одного типа. Сделайте это, если вы этого хотите.

12
задан John Gasper 3 July 2014 в 00:02
поделиться

7 ответов

При добавлении requirePermission ='false' атрибут в configsections app.config помогает много:

 <sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section requirePermission="false" name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </sectionGroup>

Это сделало прием для меня!

2
ответ дан 2 December 2019 в 19:56
поделиться

Microsoft имеет инструмент, названный permcalc, которые анализируют блок, и производит подробный xml выходной файл, который похож на это:

<Type Name="MyClass">
<Method Sig="instance void .ctor()">
<Demand>
<PermissionSet version="1" class="System.Security.PermissionSet">
  <IPermission version="1" class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Unrestricted="true" /> 
  <IPermission version="1" class="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Unrestricted="true" /> 
...
4
ответ дан 2 December 2019 в 19:56
поделиться

Сообщение об исключении говорит Вам, почему Вы не можете работать с частичным доверием:

System.Security.Permissions.SecurityAction.LinkDemand

Если Вы скопируете и вставите это в Google, то Вы найдете несколько соответствующих статей о MSDN, который мог бы помочь Вам обнаружить, почему Ваше приложение требует полного доверия.

1
ответ дан 2 December 2019 в 19:56
поделиться

Кажется, что моя проблема вызывается тем, что мой блок сильно подписывается.

Заключенный в кавычки из MSDN

В сборках со строгим именем LinkDemand применяется ко всем публично доступным методам, свойствам и событиям там для ограничения их использования полностью доверяемыми вызывающими сторонами. Для отключения этой опции необходимо применить AllowPartiallyTrustedCallersAttributeattribute.

Я добавляю необходимый атрибут к своему блоку, и я сообщу, как вещи складываются:

[assembly:AllowPartiallyTrustedCallers]

Обновление: я добавил атрибут к своим блокам, но я также использую некоторые блоки .NET.

Не все блоки .NET могут использоваться частично доверяемыми блоками (вот список), а именно, блоки WCF (т.е. Система. ServiceModel), не находится в списке

Однако Microsoft заявляет, что возможно использовать WCF в частичной доверительной среде (см. здесь),

Я попытался удалить все ненужные блоки из своих ссылок, я использовал AllowPartiallyTrustedCallers во всех своих блоках, и я все еще stucked...

10
ответ дан 2 December 2019 в 19:56
поделиться

Hrm, просто предположение, но это убегает сетевого ресурса?.NET, кажется, присваивает доверие на основе местоположения, от которого выполняется код. Если это откуда-либо, но Ваш локальный жесткий диск затем Вы собираетесь иметь проблемы безопасности.

0
ответ дан 2 December 2019 в 19:56
поделиться

Не видя код для Вашего приложения, невозможно сказать. Существует что-то, что требует полного доверия Вашему приложению, которое Вы, возможно, пропустили (возможно, зависимость?).

0
ответ дан 2 December 2019 в 19:56
поделиться

Ваше отслеживание стека не показывает тип потребованного разрешения.

AllowPartiallyTrustedCallers не поможет Вам в этом случае. Это должно быть указано на цели вызова, например, когда некоторый частично доверяемый код звонит в Ваш доверяемый блок. В Вашей ситуации необходимо исследовать, звонит ли приложение в блоки, которым не определили этот атрибут. Если да затем Ваше приложение должно будет работать в полном доверии и не будет работать в частичном доверии вообще (это - то, как CAS осуществляется и дизайном.)

Иначе используйте permcalc. Это покажет Вам полномочия, которые должны затем быть включены в настройках безопасности проекта. Однако я не уверен, будет ли после включая весь тот перманент у Вас все еще "частичное доверительное" или довольно полное доверие с несколькими упрощенными полномочиями. Это - то, вследствие того, что частичное доверие очень строго (откройте security.config и посмотрите на включенные полномочия!), насколько я знаю, WebPermission не там (который необходим для отправки запросов HTTP), то же с FileIOPermission.

0
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: