如何将Windows用户名放在c#中的版本信息中

时间:2012-08-23 09:27:31

标签: c#

我使用这里非常有用的信息在我的c#dll中构建了一个版本信息命令: Displaying the build date

我实际上输出了一个范围到excel,它显示了一些文本,汇编信息和构建日期/时间等。理想情况下我会说“建于2013年8月23日10:24:30用户名” ”。我怎样才能获得该用户名(登录ID很好)?

由于 克雷格

---在回复评论时,请参阅下面的进一步信息 - 上述问题仍然存在

您好 如果对于可能对此主题感兴趣的人有所帮助,我将在我的公司描述情况:最多可能有3人开发代码,所有代码都是用VS编译的,我们只在Windows系统上工作( 8)。用户群最多为20人。这些代码是通过svn进行版本控制的,事情处于原型阶段,所以我们还没有进入官方发布周期。但是在白天,我们3个人很可能会对选定的用户进行一些更改并发布,因此在某些时候用户之间的版本可能会失去同步。我想知道一个用户是否向我抱怨说某些东西不起作用谁给了他们那个版本。如果它不起作用那么很可能是那个改变的人。编译代码对自己的东西做了一些更改,并没有运行回归测试并将代码发布给一些用户。我想很快就知道是谁做了编码和编码。通过方法发布/编译我在这里问这个问题所以我可以找到它们并给它们一个耳光,而不必深入研究Svn更改日志(由于未检入更改,因此甚至可能没有更改) 。所以希望现在已经完全清楚了 - 我同意这是一个非常非正式的安排,但它适用于我们工作的环境。没有关于代码发布周期等的讲座请,我确信解决方案很简单,我不确定如何改变主题标题会有所帮助 - 这正是我想要做的。 谢谢 克雷格

2 个答案:

答案 0 :(得分:1)

虽然您已经通过阅读PE标头实现了版本信息,但这并非严格要求。

要在不阅读PE标题的情况下解决您的问题,您可以:

  1. 定义自定义属性

    [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
    internal sealed class BuildInfoAttribute : Attribute 
    {
        public string UserName
        {
            get; private set;
        }
    
        public string BuildDate
        {
            get; private set;
        }
    
        public BuildInfoAttribute(string username, string buildDate)
        {
            UserName = username;
            BuildDate = buildDate;
        }
    }
    
  2. 在AssemblyInfo.cs中包含该属性

    [assembly: BuildInfo("AmitMittal", "08/23/2012 17:40:16")]
    
  3. 下载并安装MSBuild Community Tasks。请记住选择与VS集成的选项

  4. 在文本编辑器中打开.csproj文件,并在</Project>标记

    之前包含以下几行
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
    <PropertyGroup>
      <UseHostCompilerIfAvailable>FALSE</UseHostCompilerIfAvailable>
    </PropertyGroup>
    <Target Name="BeforeBuild">
    <Time>
      <Output PropertyName="BuildDateTime" TaskParameter="FormattedTime" />
    </Time>
    <FileUpdate Files="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs" Regex="BuildInfo\(.*" ReplacementText="BuildInfo(&quot;$(USERNAME)&quot;,&quot;$(BuildDateTime)&quot;)]" Condition="'$(Configuration)' == 'Release'" />
    </Target>
    
  5. 构建发布模式,为项目添加时间戳

  6. 获取BuildInfo如下:

    var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof (BuildInfoAttribute), false);
    BuildInfoAttribute attribute = (BuildInfoAttribute) attributes[0];
    Console.WriteLine("Built by " + attribute.UserName + " on " + attribute.BuildDate);
    

答案 1 :(得分:0)

您可以使用Environment.UserName:

var username = Environment.Username;

请参阅此处了解文档 - http://msdn.microsoft.com/en-us/library/system.environment.username.aspx

您也可以使用WindowsIdentity。在这种情况下,如果我记得它还包括域名(如果适用):

var username = WindowsIdentity.GetCurrent().Name;