Исправьте значение тега rootnamespace в файле проекта

Обновлено: 07.07.2024

Я знаю, что AssemblyInfo.cs создается динамически в папке: obj/Debug/netcoreapp1.1/

Он не принимает старый метод: [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.*")]

Если я устанавливаю проект в пакет, я могу установить версии там, но это, похоже, используется для сборки файла AssemblyInfo.cs.

ОТВЕТЫ

Ответ 1

Я искал инкрементатор версии для приложения Net Core в VS2017, используя формат конфигурации csproj.

Я нашел проект под названием dotnet bump, который работал для формата project.json, но изо всех сил пытался найти решение для формата .csproj. Автор, который столкнулся с дотнетом, предложил решение для формата .csproj, которое называется MSBump.

Для этого существует проект на GitHub:

где вы можете увидеть код и его доступны на Nuget тоже. Просто найдите MSBump на Nuget.

Ответ 2

Добавьте <Deterministic>False</Deterministic> в раздел <PropertyGroup> .csproj

Однако, если вы используете TeamCity, TFS или другой инструмент CI/CD, вероятно, лучше держать номер версии под контролем и увеличивать их и передавать в качестве параметра (как было предложено в других ответах), например,

Ответ 3

Если вы используете Visual Studio Team Services/TFS или какой-либо другой процесс сборки CI, чтобы иметь встроенное управление версиями, вы можете использовать атрибут msbuild Condition , например:

Ответ 4

Я придумал решение, которое работало почти так же, как старый атрибут AssemblyVersion со звездочкой (*) - AssemblyVersion ( "1.0." ) *

Значения для AssemblyVersion и AssemblyFileVersion находятся в файле MSBuild .csproj (не в AssemblyInfo.cs) как свойство FileVersion (генерирует AssemblyFileVersionAttribute) и AssemblyVersion strong > (генерирует AssemblyVersionAttribute). В процессе MSBuild мы используем нашу задачу MSBuild для генерации номеров версий, а затем переопределяем значения этих свойств FileVersion и AssemblyVersion с новыми значениями из задачи.

Итак, сначала мы создаем нашу собственную задачу MSBuild GetCurrentBuildVersion:

.csproj может выглядеть следующим образом:

Этот целевой проект также доступен в моем GitHub holajan/DC.Build.Tasks

Теперь мы настраиваем MSBuild для использования этой задачи и устанавливаем свойства FileVersion и AssemblyVersion. В файле .csproj он выглядит так:

Импортируйте вещи здесь:

  • Упомянутый UseTask импортирует задачу GetCurrentBuildVersion из DC.Build.Tasks.dll. Предполагается, что этот DLL файл находится в родительском каталоге из вашего .csproj файла.
  • Наша BeforeBuildActionsProject1 Цель, вызывающая задачу, должна иметь уникальное имя для каждого проекта, если у нас больше проектов в решении, которое вызывает задачу GetCurrentBuildVersion.

Преимущество этого решения заключается в том, что он работает не только от сборки на сервере сборки, но также и в ручных сборках из сборки dotnet или Visual Studio.

Ответ 5

Вы можете использовать функцию свойства MSBuild для установки суффикса версии на основе текущей даты:

Это выведет пакет с таким именем, как: PackageName.1.0.0-pre20180807-1711.nupkg.

Version формируется из комбинации VersionPrefix и VersionSuffix , или, если VersionSuffix пусто, только VersionPrefix .

Ответ 6

Эти значения теперь задаются в файле .csproj :

Это те же значения, которые вы видите, если вы заходите на вкладку "Пакет" в настройках проекта. Хотя я не думаю, что вы можете использовать * для автоматического обновления версии, что вы можете сделать, это ввести шаг последующей обработки, который заменяет версии для вас (например, как часть вашей непрерывной интеграции).

Ответ 7

Я отвечал: "Кто-нибудь понял, как управлять версией в проектах .NET Core (или .NETStandard)". Я нашел этот вопрос, пытаясь решить эту проблему в контексте сборки CI. Я хотел установить версию сборки на номер сборки CI.

Ответ 8

Я принял вышеуказанный ответ, потому что @Gigi правильный (на данный момент), но я был раздражен и предложил следующие сценарии PowerShell.

Сначала у меня есть скрипт в папке с моим решением (UpdateBuildVersion.ps1):

Я добавил это в файл csproj:

Даже несмотря на то, что он установлен как PreBuildEvent, на самом деле номера версий не обновляются, пока ПОСЛЕ файла не будет загружено в память, поэтому номер версии не будет отображаться до следующей сборки. На самом деле вы можете изменить его на PostBuildEvent, и он будет иметь тот же эффект.

Я также создал следующие два сценария: (UpdateMinorVersion.ps1)

Ответ 9

Ответ 10

Я использую файл Prebuild.targets.xml, который находится в корневой папке для проекта и включен в файл csproj, например:

Используйте тег "GenerateAssembyInfo", чтобы отключить автоматическую сборку информации о сборке.

Затем файл Prebuild.targets.xml будет генерировать файл CommonAssemblyInfo.cs, где вы можете включить теги версии, которые вы хотите, на основе GIT version

ПРИМЕЧАНИЕ. Я нашел файл Prebuilds.targets.xml где-то в другом месте, поэтому havent потрудился его очистить.)

EDIT: если вы создаете с помощью MSBUILD

Может возникнуть проблема, используйте

Ответ 11

Ответ 12

Я думаю, что этот ответ от @joelsand является правильным ответом для установки номера версии для ядра dotnet, работающего на VSTS

Чтобы добавить больше информации для этого ответа,

BUILD_BUILDNUMBER на самом деле является предопределенной переменной.

Оказывается, есть две версии предопределенной переменной.

Один - build.xxxx, другой - BUILD_XXXX.

Вы можете использовать Environment Variable Name только в cproj.

Ответ 13

Мы можем использовать специальный параметр для dotnet publish -- version-suffix 1.2.3

Что означает свойство <RootNamespace>yadayada</RootNamespace> ? Влияет ли это каким-либо образом на выходные артефакты?

2 ответа

Мы только недавно перешли на VS 2010, и у меня было решение, которое работало нормально. Это Моринг когда я пытаюсь загрузить решение я получаю ошибку: An item with the same key has already been added. Это происходит, когда он пытается загрузить один из наших основных проектов, но он не.

Немного поздно, но врачи говорят:

Корневое пространство имен для указанного проекта. RootNamespace используется для определения правильного именования управляемого ресурса DLLs.

Так что, я думаю, это имело значение для проектов C++/CLI. Но, видя, что он не упоминается в Visual Studio 2019 SDK, я не уверен, что он все еще используется.

Это будет ваше пространство имен по умолчанию при добавлении новых элементов в проект, а также при компиляции, ссылки из другого проекта, это будет пространство имен, на которое они будут ссылаться. Вы/другие также можете использовать инструмент ildasm , чтобы заглянуть внутрь, поэтому любые хорошие соглашения об именах полезны.

Похожие вопросы:

В файле .vcxproj каковы возможные значения для ConfigurationType и что эти значения означают? - Или-где я могу найти эту информацию на MSDN? Мне было трудно продать хорошую поисковую строку, чтобы.

Что означает тег <l:content> в SAPUI5? Я знаю, что речь идет о содержании, но ссылки на этот тег в документации не имеют для меня никакого смысла. Может ли кто-нибудь дать мне примеры.

Кто-нибудь знает, что означает тег <<= в JavaScript? <!DOCTYPE html> <html> <body> <script> var temp = 14; var y = 2; temp <<= y; document.write(temp);.

Мы только недавно перешли на VS 2010, и у меня было решение, которое работало нормально. Это Моринг когда я пытаюсь загрузить решение я получаю ошибку: An item with the same key has already been.

Я пытался разложить некоторые свойства в некоторых проектах C++ в решении Visual Studio 2013 Update 4 на отдельные файлы свойств, которые затем импортирую в файлы vcxproj. После этого я заметил, что.

Я новичок в разработке Android, поэтому извините, если на этот вопрос можно легко ответить, но я хотел бы спросить, что означает следующий тег: <com.example.android.ViewName /> Я пытаюсь.

При построении моего проекта возникает ошибка не генерирования файла (. tlb) в файле (vcxproj. rc) : ошибка RC2135: файл не найден: DocOutPPML.tlb.

Я вижу следующее во многих файлах*. vcxproj <PropertyGroup Label=Globals> <ProjectGuid></ProjectGuid> <Keyword>Win32Proj</Keyword>.

Не удалось найти ресурсы подходящий для указанной культуры или нейтральной культурой. Убедиться "Servers.Resources.resources" - правильно встраивается или сборка "RT.Servers" во время компиляции, или что все спутниковые сборки требуемые являются загружаемыми и полностью подписан.

Я никогда не играл с культурами или подписанием сборки, поэтому я не знаю, что здесь происходит. Кроме того, это работает в другом проекте, который использует одну и ту же библиотеку. Любые идеи?

ОТВЕТЫ

Ответ 1

Если файл .resx был добавлен в проект вручную, для свойства Custom Tool файла должен быть установлен "ResXFileCodeGenerator".

Проблема связана с несоответствием пространств имен, которое возникает, если вы измените "пространство имен по умолчанию" сборки в настройках проекта. (Я изменил его (ранее) "Servers" на (сейчас) "RT.Servers" .)

В автогенерированном коде в Resources.Designer.cs имеется следующий код:

Литеральная строка "Servers.Resources" должна была быть изменена на "RT.Servers.Resources" . Я сделал это вручную, но выполнение специального инструмента было бы так же хорошо сделано.

Ответ 2

Сегодня я столкнулся с этой проблемой, и я нашел эту страницу справки и поддержки Microsoft, которая действительно помогла решить проблему.

У меня было несколько делегатов в верхней части моего файла, в глобальном пространстве имен, и внезапно я получал MissingManifestResourceException при запуске программы в этой строке:

Затем я переместил делегатов в пространство имен, получил ту же ошибку. Наконец, я помещал делегатов в единственный класс в этом файле, и ошибка ушла, но мне не нужны делегаты в этом классе или пространстве имен.

Затем я наткнулся на эту ссылку выше, в которой говорилось

Чтобы решить эту проблему, переместите все определения других классов так, чтобы они отображались после определения класса формы.

Я помещаю делегатов (которые я бы не рассматривал "определения классов" ) в нижней части этого файла, за пределами локального пространства имен, и программа больше не получала MissingManifestResourceException . Какая раздражающая ошибка. Но это кажется более надежным решением, чем изменение автоматически сгенерированного кода:)

Ответ 3

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

Если вы добавите класс перед классом конструктора, вы получите исключение MissingManifestResourceException во время выполнения (нет ошибки времени компиляции или предупреждения), потому что

Visual Studio требует, чтобы дизайнеры использовали первый класс в файле.

Для (немного) дополнительной информации см. этот пост.

Ответ 4

У меня была та же проблема, но с помощью команды Run Custom Tool в предложенной Timwi, в моем случае это не помогло.

Однако это привело меня в правильное направление, потому что я попал в свойства файла .resx. Здесь я заметил разницу в другом файле .resx, который не вызывал проблем.

В моем случае мне пришлось изменить свойство "Build Action" с "Resource" на "Embedded Resource".

Мое лучшее предположение по той причине, что у меня был .resx в библиотеке, которая использовалась из другого приложения. У моего приложения не было собственного .resx файла, поэтому он должен был использовать тот, который есть в библиотеке, который доступен только при вставке в библиотеку, а не в автономном режиме.

Ответ 5

Когда я запускаю аналогичную проблему, в Vs 2012 выяснилось, что свойство "Пользовательское пространство имен объектов" файла resx было неправильным (в моем случае, на самом деле, оно было отменено, поэтому сгенерированный код сменил это исключение во время выполнения). Мой последний набор свойств для файла resx был примерно таким:

  • Действие сборки: Встроенный ресурс
  • Скопировать в выходной каталог: Не копировать
  • Пользовательский инструмент: ResXFileCodeGenerator
  • Пользовательское пространство имен: My.Project.S.Proper.Namespace

Ответ 6

Повторяю здесь ответ только для полноты:

Похоже, добавление логического имени в файл проекта исправляет его:

то есть. поэтому встроенная запись ресурса в файле проекта выглядит следующим образом:

Обратите внимание, что мы используем файл .resx, но ошибка все еще возникает.

Обновление: проблема с ресурсами (включая XAML), по-видимому, связана с выходными путями и использованием перемотки вперед или назад, как описано в: Почему происходит изменение каталогов выходных данных проекта: IOException был необработанным и не удалось найти ресурс "app.xaml" . "

Ответ 7

Я столкнулся с другой причиной этой проблемы, которая не была связана с файлами resx. У меня была библиотека классов, где AssemblyInfo.cs содержала следующее:

В сборке не было ни одного словаря WPF, темы или ресурса. Я избавился от исключения, удалив атрибут ThemeInfo.

Я не получил фактическое исключение, только

Первое случайное исключение типа "System.Resources.MissingManifestResourceException".

Просмотр сведений об исключении, система запрашивала MyAssembly.g.resources

Надеюсь, что это может помочь кому-то другому.

Ответ 8

Не уверен, что это поможет людям, но это помогло мне:

Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что "My.Resources.Resources.resources" был правильно встроен или связан с сборкой "X" во время компиляции или что все необходимые сборочные узлы загружаемы и полностью подписаны "

Я пытался получить ресурсы, которые были встроены в мой проект из другой библиотеки классов.

Затем запустите и voilà, для меня больше нет ошибок.

Ответ 9

Решение, данное BlaM, тоже помогло мне.

Я пользователь VS 2013. Пройдя через множество исправлений, но не повезло, я попробовал это:

  • Щелкните правой кнопкой мыши файл ресурсов, один за другим, в случае нескольких файлов.
  • Убедитесь, что для свойства Build Action установлено значение "Embedded Resource".

Ответ 10

У меня была такая же проблема, но в моем случае я помещаю класс в usercontrol, который связан с usercontrol, подобным этому

Решение заключалось в том, чтобы переместить MyUserControlObject в конец класса Usercontrol, например,

Я надеюсь, что это поможет

Ответ 11

Я получал ошибку MissingManifestResourceException после того, как портировал свой проект с VS2005 на VS2010. У меня не было других классов, определенных в файле, который содержит мой класс Form. И у меня также было правильно задано имя файла ресурсов resx. Не работает.

Итак, я удалил файлы resx и восстановил их. Теперь все хорошо.

Ответ 12

Недавно столкнулся с той же проблемой, немного потрудился, нашел эту тему, но ответы на нее не были верны.

Моя проблема заключалась в том, что когда я удалил главное окно из моего проекта WPF (у него нет главного окна), я забыл удалить StartupUri из App.xaml . Я предполагаю, что это исключение может произойти, если у вас есть ошибка в StartupUri , поэтому в случае, если кто-то борется с этим - проверьте StartupUri на App.xaml .

Ответ 13

Недавно наткнулся на эту проблему, в моем случае я сделал несколько вещей:

Убедитесь, что пространства имен согласованы в файле Designer.cs файла resx

Убедитесь, что пространство имен по умолчанию для сборки (щелкните правой кнопкой мыши по проекту и выберите "Свойства") установлено равным пространству имен, в котором находится файл ресурсов.

Как только я сделал шаг 2, исключение ушло.

Ответ 14

Потому что я предварительно компилирую мое веб-приложение (используя функцию публикации VS2012). Я получил ошибку выше. Я попробовал все предложения, но странное изменение "Build Action" на "Content" сделало трюк!

Ответ 15

Ответ 16

Ответ 17

У меня была эта проблема, когда я добавил еще один класс в файл перед классом, производным от Form. Добавление его после исправленной проблемы.

Ответ 18

Просто чтобы упомянуть. Если вы используете константу или литерал, убедитесь, что они ссылаются на ресурс в форме ProjectName.Resources и не содержат cpntain Resources.resx .

Это может сэкономить вам час или два.

Ответ 19

Я столкнулся с этой проблемой в управляемом проекте C++ на основе WinForms после переименования глобального пространства имен (не вручную, а с помощью инструмента переименования VS2017).

Решение простое, но нигде не упоминается.

Вы должны изменить запись RootNamespace в файле vcxproj, чтобы она соответствовала пространству имен C++.

Ответ 20

Эта проблема возникает, если вы используете локализованный ресурс, который существует в сборке спутников, созданный с помощью файла .resources, который имеет неправильное имя файла. Эта проблема обычно возникает, если вы вручную создаете спутниковую сборку.

По умолчанию классы моделей в Laravel 7 и Laravel 6 расположены в корне папки приложения: app и имеют пространство имен App. Это не очень хорошо с точки зрения структуры. Рекомендую по аналогии с контроллерами вынести модели в папку "app/Models", предварительно создав её, и использовать пространство имён "App/Models".

Для осуществения этих изменений потребуется:

  • переместить все файлы классов с моделиями в созданную папку;
  • изменить у них namespace;
  • внести изменения в логику класса ModelMakeCommand, расширив его и переорпеделив метод getDefaultNamespace. Затем прописать его в ServiceProvider.
  • если у вас сгенерирована модель User и логика аутентификации, нужно адаптировать её код под новые условия.

Перемещение файлов и изменение namespace

Перемещаем все модели из папки app в папку app/Models.

Models Laravel 6

Меняем "namespace App;" на namespace "App\Models;".


Кроме того, во всех файлах проекта, где используются данные классы моделей нужно заменить строки с указанием пространств имен используемых классов, например для модели User "use App/User;" на "use App/Models/User;".

Автоматическая генерация моделей в папке app/Models

При генерации модели с помощью Artisan, файл с моделью создасться в папке app и внём выставиться namespace App. Чтобы генератор создавал файл с классом в папке app/Models нужно внести изменения, описанные ниже.

Используя механизм наследования, расширим класс ModelMakeCommand и переопределим метод, отвечающий за возвращение значения namespace для генератора. Для этого, создадим файл "app/Console/Commands/ModelMakeCommand.php" со следующим содержимым:

Проверим результат, выполнив команду "php artisan make:model Test" в терминале. Убедитесь, что файл с классом, реализующем модель, создался в нужном месте и имеет верный namespace.

Корректировка файлов аутентификации, использующих модель User

Если вы добавили через artisan механизм аутентификации в ваш проект, после изменения пространства имен потребуются следующие изменения.

Читайте также: