У меня есть решение Visual Studio С#, которое состоит из некоторых проектов. Один из проектов должен ссылаться на другой проект, который не является частью решения.
Сначала я ссылался на DLL:
<ItemGroup>
<Reference Include="ExternalProj1, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Proj1\ExternalProj1.dll</HintPath>
</Reference>
</ItemGroup>
Однако я должен ссылаться на проекты, чтобы они генерировали свои DLL. На самом деле, если я ссылаюсь на dll, и они не были созданы, мне нужно построить эти проекты отдельно.
Однако при ссылках на проекты:
<ItemGroup>
<ProjectReference Include="..\..\Proj1\ExternalProj1">
<Project>{3341b552-a569-4313-aabc-34452fff60ac}</Project>
<Name>ExternalProj1</Name>
</ProjectReference>
</ItemGroup>
Однако при построении компилятор не может найти эти сборки. Странная вещь заключается в том, что процесс сборки сообщается как выполненный успешно, но в окне ошибки сообщается одно предупреждение:
Указанный компонент ExternalProj не найден.
Итак, что я делаю неправильно? спасибо
Я вижу, что вы используете ProjectReference
, с которым я знаком в простых (не NET) проектах C++. Атрибут Include должен указывать файл, а не только базовое имя; например
<ProjectReference Include="..\..\Proj1\ExternalProj1.vcxproj">
То есть ProjectReference
не является Reference
. См. Общие элементы проекта MSBuild
Кроме того, метаданные, которые определяют, нужно ли связывать LIB автоматически, определяются через предоставленные реквизиты, если он не указан для этого элемента. Является ли управляемый проект даже созданием LIB? Таким образом, это должно (с правильным именем файла) привести к тому, что назначенный проект будет построен также как зависимый, что-то со своими продуктами станет еще одной проблемой.
Попробуйте создать из командной строки MSBuild.exe, а не IDE, чтобы увидеть чистое поведение до того, как среда IDE начнет разбираться или добавит больше проблем, чтобы выяснить. И, подавайте ему конкретный файл proj, который вы хотите, а не файл решения. Файл.sln - странный зверь, и не только возможно иметь ссылки на проект, которые не присутствуют в sln, вообще нет встроенной концепции sln файла. Помимо списка проектов, отображаемых в среде IDE, это волшебный файл, преобразованный в мастер-проект "на лету", который позволяет вам называть различные цели индивидуально, не зная, какой файл proj (или путь к нему), который достаточно удобен, но в основном там для совместимости с VSBuild в соответствии с The Books. Поэтому избегайте этого, по крайней мере, чтобы упростить вещи, чтобы получить поведение, которое вы хотите на этапе исследования. Затем добавьте любые осложнения, если вы все еще хотите их :).