我有一个项目,在编译时产生以下错误:
重复'AssemblyVersion'属性
我检查了文件AssemblyInfo.cs,看起来没有重复。
我在MSDN上找到了这篇文章,它解决了一个类似的问题,并按照这篇文章中的建议解决了这个问题。
有人能告诉我这是怎么回事吗?这种情况是否只发生在有两个或多个类名称相似的项目的情况下?还是其他原因?
我有一个项目,在编译时产生以下错误:
重复'AssemblyVersion'属性
我检查了文件AssemblyInfo.cs,看起来没有重复。
我在MSDN上找到了这篇文章,它解决了一个类似的问题,并按照这篇文章中的建议解决了这个问题。
有人能告诉我这是怎么回事吗?这种情况是否只发生在有两个或多个类名称相似的项目的情况下?还是其他原因?
当前回答
我在过去也遇到过这个问题,所以我假定构建过程在提供版本控制时分别提供程序集信息。这将导致重复,因为您的项目在AssemblyInfo.cs文件中也有该信息。所以删除文件,我认为它应该工作。
其他回答
当我改变文件夹结构并尝试推送时,我也遇到了同样的问题。少管所让我先拔,我就拔了。这在旧文件夹和新文件夹中复制了我的源代码,所以在构建时出现了很多复制错误。
只需删除重复的文件夹就可以解决这个问题。
当我的主项目与解决方案位于同一文件夹中时,我就遇到了这个问题,然后我在同一解决方案中有一个位于子文件夹中的独立项目,并且该独立项目使用主项目作为参考。这导致主项目检测到子文件夹bin & obj文件夹创建重复的引用。
当我尝试在AssemblyInfo.cs中添加GitVersion工具来更新我的版本时,我遇到了同样的情况。使用VS2017和。net Core项目。所以我只是混合了两个世界。我的AssemblyInfo.cs只包含由GitVersion工具生成的版本信息,我的csproj包含其余的东西。请注意,我不使用<GenerateAssemblyInfo>false</GenerateAssemblyInfo>我只使用与版本相关的属性(见下面)。更多详细信息,这里是AssemblyInfo属性。
AssemblyInfo.cs
[assembly: AssemblyVersion("0.2.1.0")]
[assembly: AssemblyFileVersion("0.2.1.0")]
[assembly: AssemblyInformationalVersion("0.2.1+13.Branch.master.Sha.119c35af0f529e92e0f75a5e6d8373912d457818")]
我的。Csproj包含所有与其他程序集属性相关的属性:
<PropertyGroup>
...
<Company>SOME Company </Company>
<Authors>Some Authors</Authors>
<Product>SOME Product</Product>
...
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>
创建项目时,Visual Studio会将其设置为编译并生成相应的程序集。每个项目生成一个程序集,因此每个项目都有相应的程序集配置来生成其程序集。
问题是,当您创建多个项目时,每个项目都可以生成自己的程序集,然后将其中一个项目包含在另一个项目中。
在这种情况下,Visual Studio会感到困惑,不知道从哪个配置文件开始为项目生成单个程序集——它会在包含的项目中找到第二个程序集配置,并说“HEY, DUPLICATE!你给了我两套指令来生成我的程序集!”
但有时您仍然希望所包含的项目能够自行生成程序集,但当它被包含在另一个项目中时,则不能这样做。
要获得这一点,一种解决方案是向包含项目的项目(在项目属性中可以找到)添加条件定义。然后更改所包含项目中的程序集配置,以查找此条件定义。如果它是定义的(由包括项目),那么配置可以跳过它的内容——这将导致只有一个配置被VS发现——从包括项目——问题解决了!
以下步骤(包括截图)
步骤1:选择包含/容器项目>右键单击>属性
项目属性(截图)
步骤2:导航到Build > General >条件编译符号
添加如下所示的条件定义:
条件编译符号(截图)
步骤3:在包含的项目AssemblyInfo.cs中使用条件定义
使用条件定义(截图)
我一直在这个问题上挣扎,但我的问题很容易解决。
我已经将OBJ文件夹复制到“OBJ___”名称来做一些编译测试。
所以,我不知道为什么,这个文件夹也被编译,创建程序集属性副本。
我只是删除了“OBJ___”文件夹,可以成功编译。