MSBuild работает в режиме отладки, но не в режиме релиза - и еще одна интересная анамолия - PullRequest
1 голос
/ 22 ноября 2011

У меня есть базовый скрипт MSBuild, который включает в себя этап для компиляции / сборки проекта. Выглядит так:

....
    <ItemGroup>
    <ProjectReferences Include="loc1\Project1.csproj"/> 
    <ProjectReferences Include="loc2\Project2.csproj"/>
    <ProjectReferences Include="loc3\Project3.csproj"/>         
</ItemGroup>
....
    <Target Name="BuildProjects">
    <Message Text="Beginning main project build"/>
    <MSBuild Projects="@(ProjectReferences)" Targets="Build" Properties="Configuration=$(Configuration);ProjectBuild=$(ProjectBuild);AppDir=$(AppDir)">
        <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuilt"/>
    </MSBuild>      
    <!--<CallTarget Targets="BuildToolkit"/>-->
</Target>

Project3.csproj - это проект веб-служб .NET 3.5. Конфигурация передается в командной строке.

Сначала была проблема с System.Linq, которую не удалось решить; Я исправил это, создав ссылку на System.Core непосредственно в файле проекта (очевидно, это часто случается и требует этого исправления).

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

Considered "c:\Program Files (x86)\Reference Assemblies\Microsoft\VST040\v8.0\MyReferencedProjectAssembly.dll", but it didn't exist.

Это происходит много раз для ряда ссылок. Странно, но после этого я переключаюсь обратно в режим отладки, и после сброса режима он не может быть собран заново. Мне нужно удалить нарушающий Project3 из файла MSBuild, запустить снова (что работает) и снова добавить нарушающий Project3 обратно в файл, прежде чем он снова заработает в режиме отладки.

Я в тупике. Есть идеи?

1 Ответ

0 голосов
/ 22 ноября 2011

Мне кажется, что ссылки на ваши проекты настроены неправильно.Ваши проекты собраны в неправильном порядке сборки и сборка не удалась "иногда".Я полагаю, что это не имеет ничего общего с режимом отладки / выпуска.

Проверьте файлы csproj, если они содержат правильные ссылки на другие проекты.Например, если Project2 зависит от Project1:

project2.csproj:

<ProjectReference Include="..\loc1\Project1.csproj">
  <Project>{79FB10A6-6CD9-46D4-9463-319B8CBD82FE}</Project>
  <Name>Project1</Name>
</ProjectReference>

Где Project - это ProjectGuid проекта1 (из project1.csproj)

...