C# 外部别名';xxx和x27;未在/reference选项中指定
不幸的是,我有两个程序集在同一命名空间中定义了相同的类型。我正试图用一种方法来解决这个问题。在VisualStudioIDE中,我已将引用的“别名”属性设置为我的别名。这应该将C#编译器命令行更改为如下内容:C# 外部别名';xxx和x27;未在/reference选项中指定,c#,.net,C#,.net,不幸的是,我有两个程序集在同一命名空间中定义了相同的类型。我正试图用一种方法来解决这个问题。在VisualStudioIDE中,我已将引用的“别名”属性设置为我的别名。这应该将C#编译器命令行更改为如下内容: /reference:MyAlias=MyAssembly.dll 但实际上它并没有做到这一点。VisualStudioIDE似乎只是忽略了引用上的别名属性设置。因此,当我去添加行extern alias MyAlias在我的C#代码文件的顶部,我得到一个错误,即没有在编译器的/refe
/reference:MyAlias=MyAssembly.dll
但实际上它并没有做到这一点。VisualStudioIDE似乎只是忽略了引用上的别名属性设置。因此,当我去添加行
extern alias MyAlias
在我的C#代码文件的顶部,我得到一个错误,即没有在编译器的/reference选项中指定别名。我不知道我做错了什么。有什么想法吗?使用以下步骤在VS2008中为我工作:
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-您的别名)
希望这能有所帮助。布莱恩,我和你有同样的问题,我找到了解决办法 我会做和你一样的事:
如.上所示,如果安装.Net Framework 4.5,它将把您的MSBuild更新为Microsoft(R)生成引擎版本4.0.30319.17929,该版本为我的团队解决了此问题 下载.Net Framework 4.5:
将项目的目标框架设置为.NET 4.5.1MyProjects也有同样的问题,但上述解决方案不起作用。我的项目文件看起来像
<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();