小编Tim*_*ong的帖子

我应该如何从MVC 6视图中访问我的ApplicationUser属性?

我正在开发一个ASP.Net vNext/MVC6项目.我正在掌握ASP.Net Identity.

ApplicationUser类显然是在那里我应该添加任何额外的用户属性,这可与实体框架和我的附加属性获取存储在数据库中的预期.

但是,当我想从我的视图中访问当前登录用户的详细信息时,问题就出现了.具体来说,我有一个_loginPartial.cshtml我想要检索并显示用户的Gravatar图标,我需要该电子邮件地址.

Razor View基类有一个User属性,它是一个ClaimsPrincipal.如何从此User属性返回到我的ApplicationUser,以检索我的自定义属性?

请注意,我不是在询问如何查找信息; 我知道如何ApplicationUserUser.GetUserId()值中查找.这是一个关于如何合理地解决这个问题的问题.具体来说,我不想:

  • 从我的视图中执行任何类型的数据库查找(关注点分离)
  • 必须为每个控制器添加逻辑以检索当前用户的详细信息(DRY原则)
  • 必须为每个ViewModel添加User属性.

这似乎是一个"横切关注点",应该有一个集中的标准解决方案,但我觉得我错过了一块拼图游戏.从视图中获取这些自定义用户属性的最佳方法是什么?

注意:似乎MVC团队通过确保UserName属性始终设置为用户的电子邮件地址,在项目模板中侧面解决了这个问题,巧妙地避免了他们执行此查找以获取用户的电子邮件地址!这对我来说似乎有点欺骗,在我的解决方案中,用户的登录名可能是也可能不是他们的电子邮件地址,所以我不能依赖这个技巧(我怀疑还有其他属性我需要稍后访问).

c# asp.net-core asp.net-core-identity

19
推荐指数
3
解决办法
2万
查看次数

使用TeamCity进行程序集版本控制

我正在开发一个使用SVN和TeamCity构建服务器的C#/ VB.Net项目.构建产生了十几个组件.我想控制程序集版本,以便它们都匹配并匹配TeamCity构建标签.

我已将TeamCity配置为使用的构建标签

MAJOR.MINOR.{建立} {}修订

如果Major和Minor是我手动设置的常量,{Revision}由结帐时的SVN存储库版本决定,{Build}是TeamCity自动递增构建计数器.所以一个示例构建标签将是

2.5.437.4423

您建议使用哪些技术来确保所有程序集版本都与TeamCity构建标签匹配?

version-control build-automation teamcity

18
推荐指数
3
解决办法
1万
查看次数

为什么我的ASP.Net核心Web API控制器不会返回XML?

我有以下简单的Web API控制器:

    // GET: api/customers
    [HttpGet]
    public async Task<IActionResult> Get()
        {
        var customers = await uow.Users.GetAllAsync();
        var dto = customers.Select(p => new CustomerDto {Id = p.Id, Email = p.Email, UserName = p.UserName});
        return Ok(dto); // IEnumerable<CustomerDto>
        }
Run Code Online (Sandbox Code Playgroud)

在Postman中,我将Accept标头设置为application/xml,但无论我尝试什么,我都只能获得JSON数据.

邮差屏幕截图

我在某处读到,为了获取XML,我必须添加[DataContract][DataMember]属性到我的DTO,现在看起来像这样:

[DataContract]
public class CustomerDto
    {
    [DataMember]
    public string Id { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    [DataMember]
    public string Email { get; set; }

    [Required]
    [Display(Name = "Login Name")]
    [DataMember]
    public string UserName …
Run Code Online (Sandbox Code Playgroud)

xml asp.net-web-api asp.net-core-mvc asp.net-core

17
推荐指数
5
解决办法
1万
查看次数

为什么空合并运算符(??)在这种情况下不起作用?

NullReferenceException当我运行此代码时,我发现了一个意外,省略了fileSystemHelper参数(因此将其默认为null):

public class GitLog
    {
    FileSystemHelper fileSystem;

    /// <summary>
    ///   Initializes a new instance of the <see cref="GitLog" /> class.
    /// </summary>
    /// <param name="pathToWorkingCopy">The path to a Git working copy.</param>
    /// <param name="fileSystemHelper">A helper class that provides file system services (optional).</param>
    /// <exception cref="ArgumentException">Thrown if the path is invalid.</exception>
    /// <exception cref="InvalidOperationException">Thrown if there is no Git repository at the specified path.</exception>
    public GitLog(string pathToWorkingCopy, FileSystemHelper fileSystemHelper = null)
        {
        this.fileSystem = fileSystemHelper ?? new FileSystemHelper(); …
Run Code Online (Sandbox Code Playgroud)

c# null-coalescing-operator

15
推荐指数
1
解决办法
1473
查看次数

如何根据GitVersion属性命名我的WiX Installer项目的输出?

我最近开始使用GitVersion编写我的程序集,我喜欢它!

我喜欢生成一个.msi反映正在构建的产品版本的文件.到目前为止,我在我的.wixproj档案中使用了这个:

  <!-- [TPL] name the output file to include the version from theLocalServer assembly -->
  <Target Name="BeforeBuild">
    <GetAssemblyIdentity AssemblyFiles="$(SolutionDir)BuildOutput\$(Configuration)\TA.DigitalDomeworks.Server.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersions" />
    </GetAssemblyIdentity>
    <CreateProperty Value="$(OutputName).%(AssemblyVersions.Version)">
      <Output TaskParameter="Value" PropertyName="TargetName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetName)$(TargetExt)">
      <Output TaskParameter="Value" PropertyName="TargetFileName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetDir)$(TargetFileName)">
      <Output TaskParameter="Value" PropertyName="TargetPath" />
    </CreateProperty>
  </Target>
Run Code Online (Sandbox Code Playgroud)

这将生成一个名为的输出文件:

TA.DigitalDomeworks.Installer.7.1.0.3.msi

我从这个答案中找到了这个解决方案,它引用了这篇博文.它7.1.0.3来自构建中的主程序集的程序集版本,而GitVersion在其自己的构建过程中对其进行了版本控制.

但是,我真正喜欢的是使用该FullSemVer属性,可以在这里看到:

C:\Users\Tim\source\repos\TA.DigitalDomeworks [release/7.1 ?1 +0 ~1 -0 !]> gitversion
{
  "Major":7,
  "Minor":1,
  "Patch":0,
  "PreReleaseTag":"beta.3", …
Run Code Online (Sandbox Code Playgroud)

msbuild wix gitversion

14
推荐指数
1
解决办法
458
查看次数

64到32位互操作 - 如何?

我需要将一些遗留的32位代码(我没有源代码)集成到一个项目中,以便可以从64位.NET程序集中调用它.原始代码在DLL中实现为32位COM对象.Windows不允许从64位到32位对象的直接调用,所以我正在寻找如何处理这种情况的灵感.

如何从64位.NET程序集访问传统的32位COM对象?

更新:我们发现COM组件本身就是一些ANSI C的包装器,我们为它提供了原始源代码.我们能够在Visual Studio中将其编译为本机64位dll,并将其导入.NET - 抱歉移动球门柱!

.net com 64-bit x86 interop

13
推荐指数
1
解决办法
1万
查看次数

如何防止用户将二进制文件提交到subversion中?

我有一个顽固的用户,他固执地坚持将他的二进制文件(可执行文件,DLL)提交到我们的subversion存储库中.我会进去删除它们,但当然没有任何东西可以从subversion中删除.

虽然有时我们需要提交二进制文件,但我不希望用户这样做是例行公事.我可以设置一个ignore属性,但如果真的确定它们,则不会阻止用户提交二进制文件.我想做的是能够在逐个目录的基础上控制提交指定文件类型的能力,特别是.exe和.dll文件.

在SVN中有没有办法做到这一点?如果它有任何不同,我们使用VisualSVN服务器和TortoiseSVN.

svn permissions visualsvn

13
推荐指数
2
解决办法
5377
查看次数

C#中的朋友程序集

我正在尝试使用[InternalsVisibleTo()]属性创建一些'朋友组件',但我似乎无法让它工作.我已经按照微软的说明创建了签名好友程序集,我无法看到我出错的地方.所以我会在这里详细说明我的步骤,希望有人可以发现我故意的错误......?

创建一个强名称密钥并提取公钥,因此:

sn -k StrongNameKey
sn -p public.pk
sn -tp public.pk

将强名称密钥添加到每个项目并启用签名.

创建一个名为Internals的项目和一个具有内部属性的类:

namespace Internals
{
    internal class ClassWithInternals
    {
        internal string Message { get; set; }
        public ClassWithInternals(string m)
        {
            Message = m;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

创建另一个名为TestInternalsVisibleTo的项目:

namespace TestInternalsVisibleTo
{
    using Internals;

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            var c = new Internals.ClassWithInternals("Test");
            Console.WriteLine(c.Message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑Internals项目的AssemblyInfo.cs文件,并添加必要的属性:

[assembly: AssemblyTitle("AssemblyWithInternals")] …
Run Code Online (Sandbox Code Playgroud)

.net c# clr build friend

12
推荐指数
1
解决办法
5514
查看次数

Windows和SVN的错误跟踪

我正在作为一个volunatry团队的一员工作,创建一个具有许可许可证的开源产品.我们目前正在使用Visual SVN Server/TortoiseSVN进行源代码控制,使用TeamCity进行持续集成构建.

我想在混合中添加一个bug跟踪组件,它将集成到SVN中.理想情况下,我想使用FogBugz,但我们没有预算.所以,我需要一个替代方案.要求是:

  • 必须是免费的或有免费版本支持至少20名开发人员(我们是志愿者!)
  • 必须与VisualSVN Server集成
  • 必须在Windows上运行
  • 我更喜欢Microsoft技术(基于PHP的ASP.Net; MySQL上的SQL Server等)因为我们是微软的商店,我们有使用这些工具的经验,并且已经安装了它们.
  • 必须能够与地理位置分散的团队合作
  • 必须使用Visual Studio的Express版本(开发人员并非都拥有Pro版本,因此我们不能依赖Visual Studio加载项).

对于满足上述所有要求的产品,我想要社区的建议.

[澄清:我们的许可证与MIT许可证非常接近(尽管不是逐字逐句).]

svn windows bug-tracking visualsvn-server visual-studio

11
推荐指数
2
解决办法
1737
查看次数

如何使用Moq模拟集合

我对单元测试和嘲笑都是全新的,并且仍然在耳朵后面湿润.我正在使用Moq框架,我需要模拟一个集合,以便它产生一个具有我提供的值的成员.

有问题的集合类是a System.Configuration.SettingsPropertyCollection,它包含SettingsProperty对象.

反过来,它SettingsProperty有一个Attributes返回a 的属性SettingsAttributeDictionary.

我需要我的集合产生一个单独的SettingsProperty,它有一个自定义属性(派生自System.Attribute)Attributes.SettingsAttributeDictionary.

我真的很想解决这个问题,但到目前为止无济于事.我试着伸出舌头,拉着有趣的脸,但没有任何作用.

这是我到目前为止尝试过的代码,在代码中注释的时候抛出异常,因此测试总是失败.

    [TestMethod]
    public void GetPropertySettings_Should_Return_Default_Values_When_Device_Not_Registered()
        {
        const string deviceName = "My.UnitTest";
        const string deviceType = "Switch";
        var deviceId = String.Format("{0}.{1}", deviceName, deviceType);
        Mock<IProfile> mockProfile = new Mock<IProfile>();
        Mock<SettingsContext> mockSettingsContext = new Mock<SettingsContext>();
        // Construct a SettingsPropertyCollection populated with a single property.
        // The single property will have a fixed name and default value, and will also have a …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq mocking

11
推荐指数
1
解决办法
6557
查看次数