Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 外部别名';xxx和x27;未在/reference选项中指定_C#_.net - Fatal编程技术网

C# 外部别名';xxx和x27;未在/reference选项中指定

C# 外部别名';xxx和x27;未在/reference选项中指定,c#,.net,C#,.net,不幸的是,我有两个程序集在同一命名空间中定义了相同的类型。我正试图用一种方法来解决这个问题。在VisualStudioIDE中,我已将引用的“别名”属性设置为我的别名。这应该将C#编译器命令行更改为如下内容: /reference:MyAlias=MyAssembly.dll 但实际上它并没有做到这一点。VisualStudioIDE似乎只是忽略了引用上的别名属性设置。因此,当我去添加行extern alias MyAlias在我的C#代码文件的顶部,我得到一个错误,即没有在编译器的/refe

不幸的是,我有两个程序集在同一命名空间中定义了相同的类型。我正试图用一种方法来解决这个问题。在VisualStudioIDE中,我已将引用的“别名”属性设置为我的别名。这应该将C#编译器命令行更改为如下内容:

/reference:MyAlias=MyAssembly.dll

但实际上它并没有做到这一点。VisualStudioIDE似乎只是忽略了引用上的别名属性设置。因此,当我去添加行
extern alias MyAlias
在我的C#代码文件的顶部,我得到一个错误,即没有在编译器的/reference选项中指定别名。我不知道我做错了什么。有什么想法吗?

使用以下步骤在VS2008中为我工作:

  • 使用“属性”窗口将程序集的别名从“全局”更改为“MyAlias”
  • 在使用别名程序集的文件顶部,放置
    extern alias MyAlias
    这必须在使用语句的任何
    之前
  • 使用别名前缀使用所需的命名空间,例如
    使用MyAlias::MyNamespace

  • 我遇到了完全类似的问题,看起来当您清理解决方案并生成项目时,MSBuild第一次忽略引用并给出错误(可能是它还没有使用指定的引用生成某些程序集),但是在第二次尝试生成时,它仍然有效。

    我遇到了同样的问题,并且我能够重现该问题

    事实证明,在包含xaml文件的项目上,引用别名会被忽略,该文件的输出程序集定义为xmlns:local='clr-namespace:TestProject'

    如果您认为这也是您的情况,请在Microsoft Connect上投票支持我的观点

    编辑: 上面的链接中有一个建议的解决方法,需要手动编辑项目文件。为了让它工作,我必须给出装配的完整路径。将以下说明添加到项目文件的末尾:

    <Target Name="solveAliasProblem" >
    <ItemGroup>
     <ReferencePath Remove="FullPath.dll"/>
     <ReferencePath Include="FullPath.dll">
        <Aliases>ourAlias</Aliases>
     </ReferencePath>
    </ItemGroup>
    </Target>
    <PropertyGroup>
        <CoreCompileDependsOn>solveAliasProblem;$(PrepareResourcesDependsOn)</CoreCompileDependsOn>
    </PropertyGroup>
    
    
    我们的别名
    解决问题$(准备来源待决)
    
    我遇到了同样的问题,通过执行以下操作解决了问题

    转到具有冲突的程序集的“属性”窗口,并将“别名”属性从“全局”更改为“X”(X-您的别名)


    希望这能有所帮助。

    布莱恩,我和你有同样的问题,我找到了解决办法

    我会做和你一样的事:

  • 使用“属性”窗口将程序集的别名从“全局”更改为“MyAlias”
  • 在使用别名程序集的文件顶部,放置extern alias MyAlias。这必须在使用任何语句之前进行
  • 使用别名前缀使用所需的命名空间,例如使用MyAlias::MyNamespace
  • 我仍然会得到错误。在做了一点修改之后,我发现修复它的方法是将引用的dll设置为您正在使用的解决方案之外的dll。一旦我这样做了,我们都看到的错误信息消失了,我能够继续我的项目

    我希望这有帮助,快乐编码

    更新: 这是一只虫子。它将固定在.Net 4.5中。
    如.

    上所示,如果安装.Net Framework 4.5,它将把您的MSBuild更新为Microsoft(R)生成引擎版本4.0.30319.17929
    ,该版本为我的团队解决了此问题

    下载.Net Framework 4.5:

    将项目的目标框架设置为.NET 4.5.1

    MyProjects也有同样的问题,但上述解决方案不起作用。我的项目文件看起来像

        <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>
    
    
    ..\Dependencies\Third party\.net 4\AntiXSSLibrary.dll
    抗X药
    ..\..\lib\myproject\AntiXssLibrary.dll
    
    在实际项目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>
    
    
    ..\Dependencies\Third party\.net 4\AntiXSSLibrary.dll
    抗X药
    ..\..\lib\myproject\AntiXssLibrary.dll
    抗X药
    
    我也遇到了同样的问题,我最终发现.csproj文件的目标版本是4.5,而我遇到问题的dll的目标版本是4.5.2


    我将.csproj文件的目标版本更改为4.5.2,并获得了成功的构建。

    我也遇到了同样的问题,只有当我将目标版本更改为4.6.1时,我才能解决它。版本4、4.5、4.5.1或4.6没有帮助。

    请检查您的项目目标框架版本。必须是相同的版本

    我改变了相同的版本,解决了这个问题


    如果我的项目路径包含“=”符号,则在安装一些NUget软件包后也会出现同样的问题。
    我有一个类似于“D:\=Projects…”的目录,重命名它解决了这个问题。

    与建议的解决方案略有不同:

    手动将其添加到项目
    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>
    
    顺便说一句,这一个适用于
    参考
    s和
    包装参考
    s


    这里找到了解决方案:

    请发布构建输出(特别是运行Csc.exe的行)。实际上是VS2008,但这也是我的结论。构建输出可以在这里的另一个问题中看到。我现在认为这些问题是相关的。生成失败,因为第一个编译器行不包含别名。在VS2010中工作对我来说很好。可能已在SP1中修复。但对于我来说,如果运气不好,仍然会出现错误“a/reference选项中未指定外部别名”我尝试了上述代码,并以此新错误结束-无法加载文件或程序集“[AliasName]”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。我遇到的问题是,我键入了一个别名并单击了,但我没有意识到它没有保存。我不得不在属性窗口中点击另一个字段来提交它。这个链接现在已经死了:-(在.NET4.6.2中仍然有这个bug)
    extern alias myAlias;
    ...
    var test = new myAlias::Fully.Qualified.NameSpace();