我正在开发一个ASP.Net vNext/MVC6项目.我正在掌握ASP.Net Identity.
本ApplicationUser类显然是在那里我应该添加任何额外的用户属性,这可与实体框架和我的附加属性获取存储在数据库中的预期.
但是,当我想从我的视图中访问当前登录用户的详细信息时,问题就出现了.具体来说,我有一个_loginPartial.cshtml我想要检索并显示用户的Gravatar图标,我需要该电子邮件地址.
Razor View基类有一个User属性,它是一个ClaimsPrincipal.如何从此User属性返回到我的ApplicationUser,以检索我的自定义属性?
请注意,我不是在询问如何查找信息; 我知道如何ApplicationUser从User.GetUserId()值中查找.这是一个关于如何合理地解决这个问题的问题.具体来说,我不想:
这似乎是一个"横切关注点",应该有一个集中的标准解决方案,但我觉得我错过了一块拼图游戏.从视图中获取这些自定义用户属性的最佳方法是什么?
注意:似乎MVC团队通过确保UserName属性始终设置为用户的电子邮件地址,在项目模板中侧面解决了这个问题,巧妙地避免了他们执行此查找以获取用户的电子邮件地址!这对我来说似乎有点欺骗,在我的解决方案中,用户的登录名可能是也可能不是他们的电子邮件地址,所以我不能依赖这个技巧(我怀疑还有其他属性我需要稍后访问).
我正在开发一个使用SVN和TeamCity构建服务器的C#/ VB.Net项目.构建产生了十几个组件.我想控制程序集版本,以便它们都匹配并匹配TeamCity构建标签.
我已将TeamCity配置为使用的构建标签
MAJOR.MINOR.{建立} {}修订
如果Major和Minor是我手动设置的常量,{Revision}由结帐时的SVN存储库版本决定,{Build}是TeamCity自动递增构建计数器.所以一个示例构建标签将是
2.5.437.4423
您建议使用哪些技术来确保所有程序集版本都与TeamCity构建标签匹配?
我有以下简单的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) 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) 我最近开始使用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) 我需要将一些遗留的32位代码(我没有源代码)集成到一个项目中,以便可以从64位.NET程序集中调用它.原始代码在DLL中实现为32位COM对象.Windows不允许从64位到32位对象的直接调用,所以我正在寻找如何处理这种情况的灵感.
如何从64位.NET程序集访问传统的32位COM对象?
更新:我们发现COM组件本身就是一些ANSI C的包装器,我们为它提供了原始源代码.我们能够在Visual Studio中将其编译为本机64位dll,并将其导入.NET - 抱歉移动球门柱!
我有一个顽固的用户,他固执地坚持将他的二进制文件(可执行文件,DLL)提交到我们的subversion存储库中.我会进去删除它们,但当然没有任何东西可以从subversion中删除.
虽然有时我们需要提交二进制文件,但我不希望用户这样做是例行公事.我可以设置一个ignore属性,但如果真的确定它们,则不会阻止用户提交二进制文件.我想做的是能够在逐个目录的基础上控制提交指定文件类型的能力,特别是.exe和.dll文件.
在SVN中有没有办法做到这一点?如果它有任何不同,我们使用VisualSVN服务器和TortoiseSVN.
我正在尝试使用[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) 我正在作为一个volunatry团队的一员工作,创建一个具有许可许可证的开源产品.我们目前正在使用Visual SVN Server/TortoiseSVN进行源代码控制,使用TeamCity进行持续集成构建.
我想在混合中添加一个bug跟踪组件,它将集成到SVN中.理想情况下,我想使用FogBugz,但我们没有预算.所以,我需要一个替代方案.要求是:
对于满足上述所有要求的产品,我想要社区的建议.
[澄清:我们的许可证与MIT许可证非常接近(尽管不是逐字逐句).]
我对单元测试和嘲笑都是全新的,并且仍然在耳朵后面湿润.我正在使用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# ×4
.net ×2
asp.net-core ×2
svn ×2
64-bit ×1
bug-tracking ×1
build ×1
clr ×1
com ×1
friend ×1
gitversion ×1
interop ×1
mocking ×1
moq ×1
msbuild ×1
permissions ×1
teamcity ×1
unit-testing ×1
visualsvn ×1
windows ×1
wix ×1
x86 ×1
xml ×1