CAS не работает для сопоставленного диска VS2010

У меня есть проект, использующий дозвуковой режим, который я разработал в Visual Studio 2008 на диске C :. Нет проблем. Я только что обновился до Visual Studio 2010 (и, поскольку мой компьютер случайно умер, я теперь запускаю Windows XP, виртуализированную с помощью VirtualBox).

Проект работает без жалоб на диске C :, но если я запустил его с G: (подключенного диска, который указывает на раздел на базовом ПК), я не смогу запустить настраиваемые инструменты для дозвукового использования (ошибка указана ниже), ИЛИ запустить веб-приложение («запуск без отладки» дает мне: не удалось начать мониторинг изменений в «G: \ GPNNT \ GpnntApp \ GpnntApp»).

Это решение .net 3.5.

введите описание изображения здесь

Казалось бы, это хорошо задокументированная и очевидная проблема. Я предпринял следующие действия:

(1) ПАКЕТНЫЙ ФАЙЛ

c:
cd "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"
caspol -all -reset
caspol -q -machine -addgroup 1 -url file:////g:\* FullTrust -name "G Drive"
caspol -q -machine -addgroup 1 -url g:\* FullTrust -name "G Drive 1"


c:
cd "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319"
caspol -all -reset
caspol -q -machine -addgroup 1 -url file:////g:\* FullTrust -name "G Drive"
caspol -q -machine -addgroup 1 -url g:\* FullTrust -name "G Drive"

pause

(Я пробовал миллионы разных форматов URL, но безрезультатно)

(2) Утилита настройки .Net 2.0 (Панель управления> Инструменты администратора)

Используя инструмент анализа, обе настройки, сделанные в пакетном файле выше, по-видимому, применяются к файлам на диске.
Я также попытался установить для группы интрасети значение FullTrust (чего я бы предпочел не делать!). Нет разницы.

(3) loadFromRemoteSources

Разумно предположить, что, хотя сам проект использует только .NET 2, сам VS2010 может использовать .NET 4 внутри себя. После еще нескольких поисков в Google (например, здесь), добавил я

<runtime>
  <loadFromRemoteSources enabled="true"/>
</runtime>

в файлы machine.config обеих версий .net.

(4) Обновление до VS2010 SP1

Ничего из этого не изменилось. Может ли кто-нибудь пролить свет на это, прежде чем мое кровяное давление достигнет опасно высокого уровня? Полагаю, я могу вернуться к запуску всего на C :, но это кажется немного смешным в наш век виртуализации. Мне действительно нужны данные в другом месте, чем виртуальная машина.

Я отмечаю, что это сообщение SO имеет ту же проблему, и обвиняет тестовые проекты, которые не ужасно удовлетворительно. У меня также нет тестового проекта, хотя я полагаю, что где-то в DLL SubSonic могут быть ссылки на тесты.

ДОБАВЛЕНИЕ ПОСЛЕДНЕЙ МИНУТЫ: я также заметил, что SQL Server 2005/8 не будет разговаривать с G: (например, восстановить резервную копию оттуда), и предполагаю, что любое решение также позволит это сделать. Это было бы еще одним отличным подарком.


person Ben McIntyre    schedule 24.08.2011    source источник


Ответы (2)


Для потомков вот некоторые результаты моих исследований.

Подключенные диски в VS 2010:

  • появляется начальное сообщение о загрузке проекта из небезопасного места. Это исправляется с помощью CASPOL, как описано. CASPOL довольно гибок в использовании своих URL-адресов и принимает оба представленных формата. CASPOL по умолчанию отключен в .NET 4, поэтому настройки не будут иметь значения (см. Причины здесь).
  • после этого есть еще несколько проблем, я их не документировал, но после устранения каждой возникает другая. loadFromRemoteSources исправил одно сообщение, но ничего из того, что я сделал, не могло коснуться «Не удалось начать мониторинг изменений ...». Как часть этого, ответ Кристофа, вероятно, верен (по крайней мере, для .NET 2), поскольку вам, вероятно, придется настраивать каждую сборку на диске, что совершенно непрактично для диска проекта VS.

Поэтому неудивительно, что я думаю, что будет слишком болезненно хранить проекты VS на подключенном диске. Управление версиями и локальный проект - это то, что вам нужно. Честно говоря, отсутствие отмены на сетевом диске - это проблема для разработчиков, ИМО.

НО

исходная проблема заключалась не столько в том, что мне нужен был сетевой диск, сколько в том, что я не хотел хранить проект на C: моей виртуальной машины (т. е. я хотел иметь возможность выполнять резервное копирование данных отдельно от образа диска на основе виртуальной машины ).

Ответ, который все время смотрел мне в лицо, заключался в том, чтобы создать второй виртуальный диск и подключить его к виртуальной машине как G :. Это локальный диск, поэтому у меня нет всех проблем с доверием, но я получаю полное разделение данных. Я храню все данные на этом диске в папке Dropbox, что дает мне полную резервную копию в реальном времени, и это меня радует.

person Ben McIntyre    schedule 16.09.2011

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

caspol -m -q -ag My_Machine_Zone -url g:\* Nothing -n "GDrive"

caspol -m -q -ag "GDrive" -strong -file "<pathToFile>" "<assemblyStrongName>" "<assemblyVersion>" FullTrust -n "GDriveFileX" -d "Code Group for fileX"

Я бы всегда создавал группу верхнего уровня, чтобы вы могли легко изменить или удалить политику позже. Я думаю, что имеет смысл не позволять полностью доверять подключенному диску на основе URI, хотя это болезненно.

По возможности используйте что-нибудь более современное.

person Christoph Grimmer-Dietrich    schedule 14.09.2011