Xamarin.Android上的Release版本中缺少Assembly * Attributes

时间:2018-07-11 21:23:19

标签: xamarin.android visual-studio-2017 .net-assembly

我的应用套件中的每个组件都在AssemblyInfo.cs中指定以下内容进行标识:

..
[assembly: AssemblyVersion("MM.nnn.*")]
[assembly: AssemblyTitle( "Component Title" )]
#if DEBUG
[assembly: AssemblyDescription( "<Component>.Debug" )]
[assembly: AssemblyConfiguration( "Debug" )]
#else
[assembly: AssemblyDescription( "<Component>.Release" )]
[assembly: AssemblyConfiguration( "Release" )]
#endif

每个组件的启动通常涉及以下顺序:

Assembly        asm =   Assembly.GetExecutingAssembly( );
FileVersionInfo fvi =   FileVersionInfo.GetVersionInfo( asm.Location );

Utils.sModInfo =    string.Format( Utils.scFmtModId, fvi.FileDescription, fvi.Comments,
                        fvi.FileVersion, Utils.GetBuildFromVersion( fvi.FileVersion ) );

出于完整性考虑:

/// <summary>Returns build-date/time, extracted from the version string
    (use on 'MM.nnn.*'-versioned assemblies)</summary>
public static DateTime  GetBuildFromVersion( string sVersion )
{
    DateTime    dB =    new DateTime( 2000, 1, 1 );
    string[]    sa =    sVersion.Split( '.' );

    if(  sa.Length == 4  )
    {
        dB =    dB.AddDays(    Convert.ToInt32( sa[ 2 ] ) );
        dB =    dB.AddSeconds( Convert.ToInt32( sa[ 3 ] ) << 1 );
    }
    return  dB;
}

现在,Xamarin.Android项目共享许多库代码,我想对相同的概念性任务使用相同的方法。因此,我创建了AssemblyInfo.cs,并进行了相应的填充。.

Debug版本中,一切工作都很好:属性已正确检索和显示。
我后来发现,第一个Release版本崩溃了,无法获取asm.Location
所以我将#if DEBUG .. #endif放在该代码周围,然后继续。.


今天,我意识到FileVersionInfo并不是必须的,因此将Android启动程序更改为:

string  sVersion =  asm.GetName( ).Version.ToString( ),
        sFileDsc =  string.Empty,
        sComment =  string.Empty;

foreach(  Attribute attr in asm.GetCustomAttributes( true )  )
{
    if(  attr.GetType( ) == typeof(AssemblyTitleAttribute)  )
        sFileDsc =      ((AssemblyTitleAttribute)attr).Title;
    else
    if(  attr.GetType( ) == typeof(AssemblyDescriptionAttribute)  )
        sComment =      ((AssemblyDescriptionAttribute)attr).Description;
}

Utils.sModInfo =    string.Format( Utils.scFmtModId, sFileDsc, sComment,
                        sVersion, Utils.GetBuildFromVersion( sVersion ) );

这在Debug的版本中完美地工作了。在Release中只给了我一个版本号!

将适当的(与所有其他组件相同的 可比较的)版本#很好,我会接受的。
但是 Assembly*Attributes构建中的其余Release会发生什么

0 个答案:

没有答案