Дизайнер рабочих процессов службы WF4, содержащий ссылку на собственную сборку, предотвращающую сборку проекта в x64 - PullRequest
2 голосов
/ 31 января 2012

У меня есть активность службы рабочего процесса, которая показывает странное поведение.Первая проблема заключается в том, что если рабочий процесс открыт в конструкторе, и я выполняю полную перестройку, то я получаю сообщение компилятора, говорящее

 warning MSB3061: Unable to delete file "E:\Work\etc.\MyAssembly.dll". Access to the path 'E:\Work\etc.\MyAssembly.dll' is denied.

Если я проверяю, что хранит дескриптор файла, это действительно devene.EXE.Если я закрою конструктор, я смогу выполнить восстановление.Вторая необычная вещь, которую я вижу, состоит в том, что пользовательские действия (которые находятся в отдельной сборке) не распознаются, опять же просто дизайнером.Поэтому, если я пытаюсь построить его, он говорит мне: «Не удалось найти тип« MyType »в сборке« MyOtherAssembly »».Если я открываю действие в представлении кода (то есть в представлении XML), то оно прекрасно работает и распознает все мои типы (как и должно быть, на них ссылаются правильно).Кроме того, на панели инструментов рабочего процесса появлялись активизации, но больше не делали этого.

Следует отметить, что проблема не только в конкретном рабочем процессе, над которым я работаю.Если я удаляю этот рабочий процесс и добавляю другой рабочий процесс службы, я вижу то же самое поведение, поэтому проблема как-то связана с самим проектом.Я попытался создать новый проект с нуля и добавить рабочий процесс службы, и это, кажется, работает, но я стремлюсь решить проблему с моим текущим проектом, так как он довольно большой.Кроме того, я сравнил ссылки на сборки в рабочем тестовом проекте с тем, который не работает, и все, что находится в рабочем объекте, также находится в нерабочем проекте.

Если это уместно, проект не был созданкак «Приложение службы рабочего процесса WCF» ... после рабочего процесса я добавил службу рабочего процесса (но когда я последний раз открывал дизайнер несколько месяцев назад, дизайнер работал нормально, как и служба).

[ОБНОВЛЕНИЕ] После того, как я попробовал все предложения и обнаружил, что ни одно из них не имеет никакого значения, я наконец сделал решающий шаг и объявил об удалении фрагментов моего проекта, чтобы посмотреть, что может быть причиной этой проблемы.Результаты оказались действительно странными, так что, надеюсь, кто-нибудь сможет помочь мне, когда я сузил проблему.

Удалив ссылки на проекты, я сузил проблему до одного проекта, на который ссылался мой WF-проект.Если бы я ссылался на этот проект и открыл WF, то проект WF не будет построен.Проект, «вызывающий» проблему, представлял собой простую библиотеку объектов передачи данных, без статических компоновщиков или чего-либо подобного, что могло бы заставить дизайнера WF создавать / удерживать ссылки.Я удалил все классы из этого проекта DTO, и проблема ушла.Затем я заявил, добавив обратно классы и пытаясь восстановить.В конце концов я попал в точку, где он перестает строить, но это кажется несколько случайным.Я добавляю обратно файл, и он прекращает сборку, удаляет этот файл, и он снова работает.Я начинаю удалять свойства из этого файла (все они представляют собой простые типы значений, в основном, целые и строки), и проект не собирается снова, пока все свойства не исчезнут.Если я добавлю какое-либо свойство в файл, сборка не будет работать.например,

public class TestUser
{
    public int test  {get; set;}
}

Сборка завершается неудачно с указанным классом, однако она работает со следующим классом

public class TestUser
{
    private int test = 0
}

Совершенно странно !.Затем, следующее, что я сделал, это добавил нарушающий проект в новый проект WF-сервиса, и изначально я не вижу такого поведения.Однако, как только я установил решение для сборки с использованием x64, проблема возникает в новом решении.Поэтому проблема возникает только в сборках x64 с определенной комбинацией файлов из моего проекта DTO.Однако точные файлы кажутся случайными ... Я могу добавить новый класс, как указано выше, и он не работает.Однако, если я удаляю все другие классы из моего приложения DTO, он снова работает.Добавление их обратно один за другим, и в конечном итоге это снова дает сбой, но не тогда, когда я удаляю класс выше (то есть класс, который был проблемой, больше не является проблемой).

Суть в том, что это похоже на ошибку в конструкторе WF4 с рабочим процессом службы, когда для сборки установлено значение x64.Мне нужно больше экспериментировать, чтобы выяснить точную комбинацию обстоятельств, которые вызывают проблему, но любые идеи тем временем приветствуются!.

Ответы [ 2 ]

0 голосов
/ 16 января 2013

Я в конце концов нашел ответ на этот вопрос.По сути, WF-дизайнер не будет работать, если решение настроено для компиляции как 64x.Причина в том, что сама Visual Studio является 32-битным приложением и поэтому не может загрузить необходимые сборки и найти любой из типов.

0 голосов
/ 04 февраля 2012

На самом деле у меня нет ответа, но вы можете попытаться сравнить рабочий с неработающим, используя что-то вроде Beyond Compare или WinDiff . Я использовал их в похожих ситуациях, когда просто отличительные черты глаз не делали различия очевидными.

Обновление: Майк, я немного потрудился. Кажется, я не могу легко воспроизвести проблему, но, поскольку у меня были похожие проблемы, и я много работаю в WF4, я чувствовал, что должен исследовать проблему немного ближе.

Ознакомьтесь с этой статьей StackOverflow . Упомянутая проблема связана не с конструктором WF, а с другими частями VS, блокирующими вывод сборки. Есть три различных решения, упомянутых в вопросе, и одно в отмеченном ответе.

Глядя на другие блоги и статьи, кажется, что все решения работают, все зависит только от того, какая часть Visual Studio блокирует файл, и какое из решений будет работать для вас. Можете ли вы дать им всем попробовать и посмотреть, работает ли какое-либо из этих решений для дизайнера, блокирующего файл?

...