小编fri*_*gle的帖子

HTMLBody拒绝输出我指定的字体大小,总是以不同的大小结束

我正在尝试使用我的C#应用​​程序生成表单电子邮件.我应该在星期五的一个小时内完成这个......但是Outlook非常不听话.

似乎无论我在MailItem的HTMLBody中指定字体大小的方式,它的大小都略有不同.Font face总是按照指定出现,但大小永远不对.

email.HTMLBody = "<p style='font-size:11px;font-family:Calibri;'>girl look at that body</p>";
email.HTMLBody = "<style> body { font-family:'Calibri'; font-size:11px; } </style> <body>girl look at that body</body>";
email.HTMLBody = "<html><header><style> body { font-family:'Calibri'; font-size:11px; } </style></header> <body>girl look at that body</body></html>";
email.HTMLBody = "<span style='font-size:11px;font-family:calibri;'>girl look at that body</span>";
Run Code Online (Sandbox Code Playgroud)

生成8.5大小的字体.

email.HTMLBody = "<html><body><font face='Calibri' size='11px'>girl look at that body</font></body></html>";
email.HTMLBody = "<font face='Calibri' size='11px'>girl look at that body</font>";
Run Code Online (Sandbox Code Playgroud)

产生12号字体.

所以,似乎是通过CSS指定11px(或11pt,也尝试过)字体让我获得8.5px,并且通过字体标签获得12px.

我已经做了一些进一步玩弄这个,基本上,字体标签产生12pt字体,无论如何.所以这是一个死路一条,但我知道字体标签无论如何都被弃用了.CSS标签会给我不同的尺寸,但很少我要求的.它总是关闭,而不是一致的数量.

代码中的font-size =电子邮件中的font-size:

  • 12 = 9
  • 13 = 10
  • 14 …

css c# outlook font-size office-interop

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

将对象的元素传递给FluentValidation SetValidator的构造函数

我正在使用FluentValidation来验证对象内部的集合,将集合项的元素与父对象的元素进行比较.

目标输出是接收集合中每个失败项目的ValidationFailures,而不仅仅是收集失败.

我有一个软件订单,包含一个软件项目列表.如果订单是针对旧系统的,则所选软件只能是传统软件,反之亦然,非传统系统只能具有非传统软件.

我的模特:

public class SoftwareOrder
{
   public bool IsLegacySystem;
   public List<SoftwareItem> Software;
   (...other fields...)
}
public class SoftwareItem
{
   public bool Selected;
   public bool IsLegacySoftware;
   public int SoftwareId;
}
Run Code Online (Sandbox Code Playgroud)

验证:

public class SoftwareOrderValidator : AbstractValidator<SoftwareOrder>
{
   public SoftwareOrderValidator()
   {
     (..other rules..)

     When(order => order.IsLegacySystem == true, () =>
     {
        RuleForEach(order => order.SoftwareItem)
           .SetValidator(new SoftwareItemValidator(true));
     });
     When(order => order.IsLegacySystem == false, () =>
     {
        RuleForEach(order => order.SoftwareItem)
           .SetValidator(new SoftwareItemValidator(false));
     });
   }
}
public class SoftwareItemValidator : AbstractValidator<SoftwareItem>
{
   public …
Run Code Online (Sandbox Code Playgroud)

c# lambda fluentvalidation

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

Visual Studio 2017 使用旧的 Nuget 包而不是程序集引用

我有一个正在开发的公共库。我们称之为 My.Common。

My.Common 的版本 1 已上传到我的 Intranet Nuget 服务器,并在其他几个库中使用,例如 My.Logging 和 My.Navigation。

在开发通过 Nuget 使用 My.Common、My.Logging 和 My.Navigation 的 .Net Core 应用程序时,我发现了 My.Common 中的一个错误。因此,我需要修复版本 2 的 My.Common。该错误影响应用程序直接使用的功能 - 它对其他库没有影响,它们可以继续使用版本 1。

我打开 My.Common 的代码,尝试修复并编译。在应用程序中,我删除了 My.Common 的 Nuget 包,并在其 bin 文件夹中添加了对 My.Common DLL 的引用。

这时我发现我在应用程序中没有看到 My.Common 的更改。在 My.Common 的“属性”窗口中,路径显示为:

C:\Users\foo\.nuget\packages\my.common\1.0.0\lib\netcoreapp2.0\My.Common.dll
Run Code Online (Sandbox Code Playgroud)

以下是 .csproj 中的引用的外观:

  <ItemGroup>
    <Reference Include="My.Common">
      <HintPath>C:\Projects\My.Common\bin\Debug\netcoreapp2.0\My.Common.dll</HintPath>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

尽管我已将其添加为程序集引用,但它正在被覆盖并从其 Nuget 包中提供!

由于程序集和 Nuget 包有不同的版本,我想我可以通过更明确地了解版本来解决这个问题。

  <ItemGroup>
    <Reference Include="My.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
      <HintPath>C:\Projects\My.Common\bin\Debug\netcoreapp2.0\My.Common.dll</HintPath>
      <SpecificVersion>true</SpecificVersion>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

当设置为 true 时,Visual Studio 似乎根本无法找到程序集 - 属性中的路径为空,并且应用程序填充“(您是否缺少程序集引用?)”错误。 …

.net-assembly visual-studio nuget .net-core visual-studio-2017

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

有没有办法在SSMS 2012中收藏或加注频繁使用的表格?

我花在SQL Server Management Studio上的80-90%的时间用于处理相同的5或6个表/视图/存储过程,在一些数据库中超过100个.

如果有一种快速方法可以通过GUI访问那些少数人,而不必每天都滚动并且日复一日地切换表/视图/可编程性文件夹,那将是非常有用的.

在我看来,我正在描绘一个最喜欢的或加星标的表格特征或部分,或者也许只是最近的表格菜单将是一个伟大的节省时间.

这是一个隐藏在SSMS中的某个功能还是插件中可用的功能?

sql sql-server ssms ssms-2012

4
推荐指数
2
解决办法
2005
查看次数

如何在C#中生成CUSIP校验位

CUSIP是一个9位数的字母数字代码,用于唯一标识财务安全性.

https://en.wikipedia.org/wiki/CUSIP

它们是在1964年发明的,并且考虑到60年代数据传输的可靠性,第9位实际上是用于确认前8个字符有效性的校验位.有时候,即使在今天,您也可能有理由想要验证CUSIP,或者公司或服务公司或服务公司决定只传输8个字符的CUSIP,即使这会破坏校验位的目的.

生成校验位的过程是:

  1. 根据字母表中的序号位置加上9(A = 10,B = 11,... Z = 35)并转换字符*= 36,@ = 37,#= 38,将非数字数字转换为值.

  2. 将每个偶数乘以2

  3. 如果乘法的结果是两位数,则将数字相加.(12 = 1 + 2 = 3)

  4. 获取所有值的总和.

  5. 获取此操作的内含值:(10 - (sum modulo 10))modulo 10.

在C#中获取此值的最佳/最简单方法是什么?

c# algorithm financial check-digit

4
推荐指数
3
解决办法
7586
查看次数

是什么决定了WCF测试客户端中方法的顺序?

WCF测试客户端似乎没有按任何逻辑顺序放置方法.但是,订单是一致的.在每个环境中都保持不变.

这不是按字母顺序排列的.这不是班级中方法的顺序.WCF测试客户端中的顺序与WSDL中的顺序不匹配.

虽然这不是完全随意的.订单有时与班级匹配.但是,您可以更改类中的顺序,重新编译,并在将服务添加回WCF测试客户端时,它不会更改为匹配.

那么确定订单是什么?

.net wcf wcftestclient

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

类中的类,实例化为单个对象

我试图让逻辑分隔符保持我的所有属性在逻辑上分开,但所以我只需要传递一个对象.我所说的是,我想实例化Object,并能够使用Object.InnerObject.InnerObjectsProperty.这是我正在测试的代码,试图弄清楚如何执行此操作:

   namespace SubclassTesting
{
    class Program
    {
        static void Main(string[] args)
        {
            int x;
            Console.WriteLine("type a number");
            x = Convert.ToInt32(Console.ReadLine());

            OuterClass TestClass = new OuterClass();

            TestClass.OuterNumber = x;
            TestClass.InnerClass.InnerNumber = x;
            Console.WriteLine("success!");
            Console.ReadKey();

        }
    }

    class OuterClass
    {
        public OuterClass()
        {
            _InnerClass InnerClass = new _InnerClass();
        }

        public int OuterNumber { get; set; }

        public class _InnerClass
        {
            public int InnerNumber { get; set; }
        }

        public _InnerClass InnerClass { get; set; }

    }

}
Run Code Online (Sandbox Code Playgroud)

此代码在TestClass.InnerClass.InnerNumber = x上失败; with NullReferenceException …

c#

2
推荐指数
1
解决办法
3001
查看次数

如何从 TFS 根设置 HintPath

我正在 Visual Studio 中整理一个模板项目供我的部门使用。项目需要引用一些存储在TFS其他地方的常用库。问题是模板可能会在各种位置使用,而我在尝试可靠地设置 HintPath 以处理所有位置时遇到了麻烦。

模板化项目需要能够在本地和 TFS 中找到公共库,以便在构建中使用。目前,在我们现有的应用程序中,引用如下所示:

<Reference Include="Company.Common">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\..\..\Core Components\Libraries\Company.Common\Latest\Company.Common.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

但是到达根节点需要遍历的父节点数量可能会有所不同。

与其为 ../、../../、../../../ 等设置 50 个条件路径,我的第一个想法是设置一个绝对引用。工作文件夹在我们的组织中是标准化的,因此在本地,始终可以在 C:\Projects\Core Components\...

但这不适用于服务器构建。所以我想我需要某种环境变量来解决 $/. 我正在想象这样的事情:

<Choose>
  <When Condition="Exists('C:\Projects')">
    <ItemGroup>
      <Reference Include="Company.Common">
        <HintPath>C:\Projects\Core Components\Libraries\Company.Common\Latest\Company.Common.dll</HintPath>
      </Reference>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <Reference Include="Company.Common">
        <HintPath>$(TFSRoot)\Core Components\Libraries\Company.Common\Latest\Company.Common.dll</HintPath>
      </Reference>
    </ItemGroup>
  </Otherwise>
</Choose>
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何实现这一点。

更新:

最终,我们确实建立了一个内部 Nuget 服务器。我建议任何有同样困境的人解决任何阻碍您设置 Nuget 的繁文缛节。我们用这种老套的做事方式生活了 3 年,总有一些新的问题需要人工干预。

tfs environment-variables csproj tfsbuild visual-studio-templates

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