CAS не работает для сопоставленного диска VS2010
У меня есть проект с использованием дозвуковых, которые я разработал в Visual Studio 2008 на диске C:. Нет проблем.
Я только что обновился до Visual Studio 2010 (и по мере того, как мой компьютер случайно умер, теперь я запускаю Windows XP, виртуализованную с VirtualBox).
Проект запускается без жалобы на диск C:, но если я запустил его из G: (сопоставленный диск, который указывает на раздел на базовом ПК), я не могу запускать дозвуковые приложения пользовательских инструментов (ошибка, указанная ниже), ИЛИ запустить веб-приложение ( "начать без отладки" дает мне: не удалось запустить мониторинг изменений в "G:\GPNNT\GpnntApp\GpnntApp" ).
Это решение .net 3.5.
![enter image description here]()
Казалось бы, это хорошо документированная и простая проблема.
Я предпринял следующие действия:
(1) ФАЙЛ BATCH
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 zillion, все безрезультатно)
(2) Утилита конфигурации .Net 2.0 (Панель управления > Инструменты администратора)
Используя инструмент анализа, обе настройки, сделанные в пакетном файле выше, применяются к файлам на диске.
Я также попытался настроить группу интрасети на FullTrust (что-то, чего я бы не хотел делать!). Нет разницы.
(3) loadFromRemoteSources
Разумно предположить, что, хотя сам проект использует только .NET 2, сам VS2010 может использовать .NET 4 внутренне. После еще нескольких поисковых запросов (например, здесь), я добавил
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
к файлам machine.config.net версий.
(4) Обновление до VS2010 SP1
Ни один из них не сделал разницу.
Может ли кто-нибудь пролить свет на это, прежде чем мое кровяное давление достигнет опасно высоких уровней? Полагаю, я могу вернуться, чтобы запустить все с C:, но в этот век виртуализации это кажется немного смешным. Мне действительно нужны данные в другом месте для виртуальной машины.
Я отмечаю this Сообщение SO имеет ту же проблему и обвиняет тестовые проекты, что не является ужасно удовлетворительным. У меня также нет тестового проекта, хотя там могут быть ссылки на тесты, похороненные в DLL SubSonic где-то, я полагаю.
LAST MINUTE ADDITION: Я также замечаю, что SQL Server 2005/8 не будет разговаривать с G: (например, восстановить резервную копию оттуда), и предположить, что любое решение также позволит это возникнуть. Это было бы еще лучше.
Ответы
Ответ 1
Для потомков, вот некоторые результаты моих исследований.
Связанные диски в VS 2010:
- есть начальное сообщение о загрузке проекта из небезопасного
место нахождения. Это фиксируется с использованием CASPOL, как описано. CASPOL довольно
гибко со своими URL-адресами и принимает оба показанных формата. CASPOL -
отключен в .NET 4 по умолчанию, поэтому настройки не будут иметь значения (см. причины здесь).
- После этого есть еще несколько проблем, я не документировал их, но после исправления каждого из них появилось другое. loadFromRemoteSources исправил одно сообщение, но я ничего не смог коснуться "Не удалось запустить мониторинг изменений...". Как часть этого, ответ Кристофа, вероятно, правильный (по крайней мере для .NET 2) в том, что вам, вероятно, придется настраивать каждую сборку на диске, что совершенно нецелесообразно для проектного диска VS.
Итак, неудивительно, я думаю, что будет просто слишком больно хранить проекты VS на сопоставленном диске. Исходный контроль и локальный проект - это путь. Честно говоря, отсутствие отмены на сетевом диске - это боль для разработчиков, а также IMO.
НО
исходная проблема была не такой, что мне нужен сетевой диск, так как я не хотел хранить проект на C: моей VM (т.е. я хотел иметь возможность резервировать данные отдельно от VM основанного на диске).
Ответ, который все время смотрел мне в лицо, заключался в том, чтобы создать второй виртуальный диск и прикрепить его к виртуальной машине как G:. Это локальный диск, поэтому я не получаю все проблемы доверия, но я получаю полное разделение данных. Я сохраняю все данные на этом диске в папке Dropbox, предоставляя мне полную резервную резервную копию в реальном времени, и что я счастлив.
Ответ 2
Возможно, я ошибаюсь (я не смотрел это), но я думаю, что вам нужно работать с сильными именами при работе с сопоставленными дисками. Как
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 e ven, хотя это больно.
Если возможно, используйте что-то более современное.