У меня есть проект библиотеки F #, который зависит от проекта библиотеки классов C #, оба в одном и том же решении. По сути, в коде F # я делаю open MyLib
(где MyLib - это имя проекта C #) и обращаюсь к некоторому коду, определенному в проекте C #.
Я компилирую, и оба проекта собираются без ошибок и предупреждений. Если затем я изменю цель с Любого ЦП на x64 в обоих проектах, проект C # по-прежнему будет работать нормально, но проект F # не будет создан с сообщениями об ошибках, сообщающими, что он не может найти модуль MyLib. Перестройка решения не помогает. Удаление всех папок bin og obj также не помогает. Если я изменю цель платформы обратно на Любой процессор или на x86, все снова скомпилируется.
Я воспроизвел это в игрушечном решении с двумя небольшими проектами, содержащими только тривиальный код, поэтому я знаю, что это не связано с моим конкретным кодом.
Кто-нибудь еще испытал это? Любые известные обходные пути?
будь здоров
-h-
Обновление: по запросу, вот мои точные шаги воспроизведения.
- Создание нового пустого решения в Visual Studio 2010
- Добавьте в проект новый проект библиотеки классов C #, назовите его MyLib
- Добавить статический метод
int GetAnswer() { return 42; }
к классу Class1
- Добавьте в проект новый проект библиотеки F #, назовите его MyOtherLib
- Добавить ссылку из проекта библиотеки F # в проект библиотеки классов C #
Добавьте этот код в Module1.fs, под строкой module Module1
:
открыть MyLib
let answer = Class1.GetAnswer ()
Compile. Все должно строиться чисто.
- Перейдите на вкладку сборки в свойствах проекта для MyLib. Измените цель платформы на x64.
- Сделайте то же самое для MyOtherLib.
- Построить снова. Теперь вы получите две ошибки в проекте F #: обе жалуются на то, что пространство имен или модули не определены.
ОБНОВЛЕНИЕ 2: только что протестировал его с Visual Studio 2010 Beta 1, и поведение остается тем же.