0

ここで非常に役立つ情報を使用して、バージョン情報コマンドを c# dll に組み込みました: ビルド日付の表示

私は実際に範囲をExcelに出力し、テキスト、アセンブリ情報、ビルドの日付/時刻などを表示します。そのユーザー名を取得するにはどうすればよいですか (ログイン ID は問題ありません)。

ありがとうクレイグ

--- コメントに応じて、以下の詳細情報を参照してください - 上記の質問はまだ有効です

こんにちは、このスレッドに興味を持っているかもしれない人々にとって物事をより明確にするのに役立つ場合は、私の会社の状況について説明します: おそらく最大で 3 人がコードを開発し、すべて VS でコンパイルされ、Windows システムでのみ作業します。 (8). ユーザー ベースは最大 20 人です。コードは svn を介してバージョン管理されており、プロトタイプの段階にあるため、正式なリリース サイクルには入っていません。ただし、日中は私たち 3 人で多数の変更を行い、選択したユーザーにリリースする可能性が高いため、ある時点でユーザー間のバージョンが同期しなくなる可能性があります。そのバージョンを提供したユーザーが何かが機能しないと不平を言うかどうかを知りたいです。それがうまくいかない場合は、変更した人が & コードをコンパイルして、独自のものにいくつかの変更を加え、回帰テストを実行せず、コードを一部のユーザーにリリースしました。Svn 変更ログ (変更がチェックインされていないため、変更されていない可能性もあります)。うまくいけば、それが完全に明確になりました-かなり非公式な取り決めに同意しますが、私たちが働いている環境では機能します.コードリリースサイクルなどに関する講義はありません.解決策は十分に単純であり、よくわかりません.スレッド タイトルの変更がどのように役立つか - それはまさに私がやりたいことです。ありがとうクレイグ ここで質問している方法で誰がコーディングとリリース/コンパイルを行ったかを非常に迅速に知りたいので、Svn変更ログを掘り下げることなく、彼らを見つけて平手打ちすることができます(そうではないかもしれません)変更がチェックインされていないため、変更されていることさえあります)。うまくいけば、それが完全に明確になりました-かなり非公式な取り決めに同意しますが、私たちが働いている環境では機能します.コードリリースサイクルなどに関する講義はありません.解決策は十分に単純であり、よくわかりません.スレッド タイトルの変更がどのように役立つか - それはまさに私がやりたいことです。ありがとうクレイグ ここで質問している方法で誰がコーディングとリリース/コンパイルを行ったかを非常に迅速に知りたいので、Svn変更ログを掘り下げることなく、彼らを見つけて平手打ちすることができます(そうではないかもしれません)変更がチェックインされていないため、変更されていることさえあります)。うまくいけば、それが完全に明確になりました-かなり非公式な取り決めに同意しますが、私たちが働いている環境では機能します.コードリリースサイクルなどに関する講義はありません.解決策は十分に単純であり、よくわかりません.スレッド タイトルの変更がどのように役立つか - それはまさに私がやりたいことです。ありがとうクレイグ Svn変更ログを掘り下げる必要はありません(変更がチェックインされていないため、変更されていない可能性さえあります)。うまくいけば、それが完全に明確になりました-かなり非公式な取り決めに同意しますが、私たちが働いている環境では機能します.コードリリースサイクルなどに関する講義はありません.解決策は十分に単純であり、よくわかりません.スレッド タイトルの変更がどのように役立つか - それはまさに私がやりたいことです。ありがとうクレイグ Svn変更ログを掘り下げる必要はありません(変更がチェックインされていないため、変更されていない可能性さえあります)。うまくいけば、それが完全に明確になりました-かなり非公式な取り決めに同意しますが、私たちが働いている環境では機能します.コードリリースサイクルなどに関する講義はありません.解決策は十分に単純であり、よくわかりません.スレッド タイトルの変更がどのように役立つか - それはまさに私がやりたいことです。ありがとうクレイグ

4

2 に答える 2

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);
    
于 2012-08-23T12:17:31.700 に答える
0

Environment.UserNameを使用できます。

var username = Environment.Username;

ドキュメントについては、こちらを参照してください-http://msdn.microsoft.com/en-us/library/system.environment.username.aspx

WindowsIdentityを使用することもできます。この場合、思い出すと、ドメイン名(該当する場合)も含まれています。

var username = WindowsIdentity.GetCurrent().Name;
于 2012-08-23T09:29:55.987 に答える