Как ссылаться на проект из решения?

1

У меня есть решение 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 не найден.

Итак, что я делаю неправильно? спасибо

  • 0
    Почему DLL хранится в Proj1 \ ExternalProj1.dll вместо Proj1 \ Bin \ Release \ ExternalProj1.dll ?? Правильно ли вы задокументировали этот вопрос?
  • 6
    Вы не можете ссылаться на проект, который не является частью вашего решения; Вы можете ссылаться только на его выходную сборку.
Показать ещё 2 комментария
Теги:
visual-studio
msbuild
csproj

1 ответ

4
Лучший ответ

Я вижу, что вы используете 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. Поэтому избегайте этого, по крайней мере, чтобы упростить вещи, чтобы получить поведение, которое вы хотите на этапе исследования. Затем добавьте любые осложнения, если вы все еще хотите их :).

  • 1
    Точно так же работает и в проектах .dotnet. Андри, это правильный ответ. Sln не требуется для сборки, каждый proj стоит отдельно. Попробуйте использовать MSbuild.exe.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню