Подтвердить что ты не робот

Внешний псевдоним "xxx" не был указан в опции/reference

У меня есть две сборки, которые, к сожалению, определяют один и тот же тип в одном и том же пространстве имен. Я пытаюсь использовать extern alias для решения этой проблемы. В Visual Studio IDE я установил свойство "Псевдонимы" ссылки на мой псевдоним. Это должно изменить командную строку компилятора С# следующим образом:

/reference:MyAlias=MyAssembly.dll

Но на самом деле это не так. В Visual Studio IDE, похоже, просто игнорируется свойство свойства "Псевдонимы" в ссылке. Поэтому, когда я иду и добавляю строку extern alias MyAlias; вверху моего файла кода С#, я получаю сообщение об ошибке, что псевдоним не был указан в параметре /reference для компилятора. Я не могу понять, что я делаю неправильно. Любые идеи?

4b9b3361

Ответ 1

У меня такая же проблема, и я смог воспроизвести проблему.

Оказывается, ссылочные псевдонимы игнорируются в проектах, содержащих xaml файлы, которые имеют определение xmlns для сборки вывода, например xmlns: local = 'clr-namespace: TestProject.

Если вы считаете, что это ваш случай, пожалуйста, проголосуйте за мой отчет об ошибке в Microsoft Connect.

EDIT: В приведенной выше ссылке предлагается предлагаемое решение, требующее редактирования файла проекта вручную. Чтобы это работало, я должен был дать полный путь сборки. Добавьте в конец файла проекта следующие инструкции:

<Target Name="solveAliasProblem" >
<ItemGroup>
 <ReferencePath Remove="FullPath.dll"/>
 <ReferencePath Include="FullPath.dll">
    <Aliases>ourAlias</Aliases>
 </ReferencePath>
</ItemGroup>
</Target>
<PropertyGroup>
    <CoreCompileDependsOn>solveAliasProblem;$(PrepareResourcesDependsOn)</CoreCompileDependsOn>
</PropertyGroup>

Ответ 2

Брайан, у меня была такая же проблема, как вы и я выяснили, как это исправить.

Я бы сделал то же самое, что и вы:

  • Используйте окно свойств, чтобы изменить псевдоним для сборки с 'global' на 'MyAlias'
  • В верхней части файла, в котором используется алиасовая сборка, добавьте внешний псевдоним MyAlias. Это должно быть до любого использования операторов.
  • Используйте префикс псевдонима для использования пространства имен, которое вы хотите, например, с помощью MyAlias ​​:: MyNamespace.

И я все равно получаю ошибку. Немного покрутив, я понял, что способ исправить это - установить ссылочную DLL в DLL, которая находится за пределами решения, в котором вы работаете. Когда я это сделал, сообщение об ошибке, которое мы оба видели, ушло, и я смог продолжить работу над своим проектом.

Я надеюсь, что это поможет, счастливое кодирование!

Ответ 4

Работайте со мной в VS2008, используя следующие шаги:

  • Используйте окно свойств, чтобы изменить псевдоним для сборки с 'global' на 'MyAlias'
  • В верхней части файла, где используется алиасовая сборка, поместите extern alias MyAlias. Это должно быть перед любыми операторами using.
  • Используйте префикс псевдонима для использования требуемого пространства имен, например using MyAlias::MyNamespace.

Ответ 5

Если вы установите .NET Framework 4.5, он обновит ваш MSBuild до Microsoft (R) Build Engine version 4.0.30319.17929, который исправил эту проблему для моей команды.

Загрузить .Net Framework 4.5:
http://www.microsoft.com/en-us/download/details.aspx?id=30653

Ответ 6

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

Ответ 7

У меня была та же проблема, и она была решена с помощью следующего.

Перейдите в окно свойств сборки с конфликтом и измените свойство "Псевдонимы" с "global" на "X" (X - ваше псевдоним)

Надеюсь, что это поможет.

Ответ 8

Установите целевую структуру проекта в .NET 4.5.1.

Ответ 9

myprojectHed ту же проблему, но вышеупомянутые решения не работали, мой файл проекта выглядел как

    <Reference Include="AntiXSSLibrary" Condition="'$(TargetFrameworkVersion)' == 'v4.0' or '$(TargetFrameworkVersion)' == 'v4.5'">
  <HintPath>..\Dependencies\Third-party\.net 4\AntiXSSLibrary.dll</HintPath>
  <Aliases>antixss</Aliases>
</Reference>
<Reference Include="AntiXssLibrary">
  <HintPath>..\..\lib\myproject\AntiXssLibrary.dll</HintPath>     
</Reference>

Добавление псевдонима, с которым работала фактическая DLL проекта. Итак,

    <Reference Include="AntiXSSLibrary" Condition="'$(TargetFrameworkVersion)' == 'v4.0' or '$(TargetFrameworkVersion)' == 'v4.5'">
  <HintPath>..\Dependencies\Third-party\.net 4\AntiXSSLibrary.dll</HintPath>
  <Aliases>antixss</Aliases>
</Reference>
<Reference Include="AntiXssLibrary">
  <HintPath>..\..\lib\myproject\AntiXssLibrary.dll</HintPath>
  <Aliases>antixss</Aliases>
</Reference>

Ответ 10

У меня была та же проблема, и я, наконец, обнаружил, что файл .csproj имеет целевую версию 4.5, а DLL, с которой я столкнулся с проблемой, нацелен на 4.5.2.

Я изменил свою целевую версию файла .csproj на 4.5.2 и получил успешную сборку.

Ответ 11

У меня была та же проблема, и я мог решить ее только тогда, когда я изменил целевую версию на 4.6.1. Варианты 4, 4.5, 4.5.1 или 4.6 не помогли.

Ответ 13

Возникла такая же проблема после установки некоторых пакетов NUget, если путь к моему проекту содержит знак "=". У меня был каталог типа "D:\= Projects...", и переименование его решило проблему.

Ответ 14

Немного отличное решение от одного предложенного orcun:

Вручную добавьте это в файл проекта csproj:

  <Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
    <ItemGroup>
      <!-- Use the file name, no need to specify the full path. -->
      <ReferencePath Condition="'%(FileName)' == 'StackExchange.Redis.StrongName'">
        <!-- Give the desired alias to the file here -->
        <Aliases>myAlias</Aliases>
      </ReferencePath>
    </ItemGroup>
  </Target>

Затем вы можете использовать его, добавив псевдоним в верхней части списка using:

extern alias myAlias;
...
var test = new myAlias::Fully.Qualified.NameSpace();

Кстати, этот работает как для Reference и для PackageReference

Решение было найдено здесь: https://github.com/NuGet/Home/issues/4989#issuecomment-311042085