Ссылка на проект Visual Studio 2008 - PullRequest
3 голосов
/ 03 декабря 2009

У меня проблема с функцией "Копировать в вывод" в Visual Studio 2008. Возможно, я неправильно понимаю, как она должна работать.

У меня есть решение с четырьмя проектами:

  • TestApp1 (приложение для Windows)
  • TestAppA (приложение для Windows)
  • TestProj1 (библиотека классов)
  • TestProjA (библиотека классов)

Зависимости являются следующими (зависимость, как в ссылке на проект).

  • TestProj1 ни от чего не зависит.
  • TestApp1 зависит от TestProj1
  • TestProjA зависит от TestProj1
  • TestAppA зависит от TestProjA (и, следовательно, косвенно от TestProj1)

Другими словами, дерево зависимостей выглядит следующим образом.

TestApp1
    TestProj1
TestProjA
    TestProj1
TestAppA
    TestProjA
        TestProj1

(каждый проект имеет ссылку на стандартные сборки (system, system.core и т. Д.))

В TestProj1 я добавил текстовый файл Test.txt. В свойствах этого файла я указал «Действие при построении: содержимое» и «Копировать в выходной каталог: всегда копировать».

Когда я создаю решение, Test.txt копируется в

  • TestApp1 \ Bin \ Debug
  • TestProj1 \ Bin \ Debug
  • TestProjA \ Bin \ Debug

Файл не скопирован в TestAppA \ bin \ debug, и это то, что я нахожу странным. Поскольку TestProj1 использует Test.txt для работы, а TestAppA полагается на TestProj1, через TestProjA TestApp1 не будет работать.

Если я добавлю ссылку на проект из TestAppA непосредственно в TestProj1 (поэтому у меня есть одна ссылка на TestProj1, а другая - на TestProjA), файл будет скопирован в папку TestAppA \ bin \ debug.

Конечно, я мог бы настроить пользовательское событие сборки, чтобы скопировать файл Test.txt в TestAppA \ bin \ debug, но у меня плохой опыт с пользовательскими событиями сборки, и я предпочел бы полагаться на встроенные механизмы копирования.

Итак, мой вопрос: почему Test.txt не копируется в TestAppA \ Bin \ debug?

Ответы [ 2 ]

4 голосов
/ 12 декабря 2009

Тодд уже хорошо ответил, но есть еще два наиболее распространенных решения:

  • добавить шаг после сборки в зависимые проекты, скопировав Test.txt в их выходную папку
  • добавьте текстовый файл в качестве встроенного ресурса в сборку проекта TestProj1 и полностью избавьтесь от необходимости во внешнем файле данных

Я бы также предположил, что все ваши зависимости могут просто вызывать API в TestProj1 для получения необходимой информации, что позволяет этой сборке инкапсулировать данные и сохранять их где угодно и в любом формате, который им нравится.

2 голосов
/ 12 декабря 2009

Visual Studio просматривает только прямые ссылки на файлы содержимого, поэтому TestAppA не знает, что Test.txt существует, поскольку не видит его в файле проекта TestProjA.

Это ограничение Visual Studio, и поэтому многие люди в итоге направляют вывод всех своих проектов в одну и ту же папку.

Другой вариант, который у вас есть, - создать папку «SharedContent». Затем вы можете поместить текстовый файл в эту папку и добавить его в каждый проект, который зависит от него, выбрав «Добавить> Существующий элемент ...» в каждом проекте. В диалоговом окне «Добавить элемент» выберите текстовый файл из общей папки и нажмите маленькую стрелку вниз на кнопке «Добавить». Если вы выберете «Добавить как ссылку», вы можете добавить файл в свой проект, не создавая копию.

...