小编Mat*_*hew的帖子

运行t4脚本作为resx文件的自定义工具

我有一个资源文件MyResource.resx,我想更改MyResource.Designer.cs文件的生成方式。

我有一个t4脚本,该脚本接受一个resx文件作为输入并提供给我最终的转换,但是,我必须手动运行此t4才能使其正常工作。

我看到resx文件的“自定义工具”属性当前指定为PublicResXFileCodeGenerator,我将其更改为TextTemplatingFileGenerator,但这仅使Visual Studio像执行t4一样执行resx。

更改资源后,如何配置t4在资源上自动运行?

.net c# resources visual-studio visual-studio-2012

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

如果引用不存在的表/列,则导致存储过程的创建失败

给出以下存储过程定义

create procedure myproc
as

select * 
from sometablethatdoesnotexist

select somecolumnthatdoesnotexist 
from sometablethatdoesexist
Run Code Online (Sandbox Code Playgroud)

如果在创建存储过程时这些对象不存在,是否可以将sql-server(或localdb)配置为无法创建存储过程?(列或表)

sql t-sql sql-server stored-procedures localdb

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

逐字输出字符串属性以防止双重编码

我有以下代码:

var data = new {
    A = "{\"X\": 5}",
    B = new {Y = 6}
};

var json = JsonConvert.SerializeObject(data);
Run Code Online (Sandbox Code Playgroud)

这导致:

{
    "A": "{\"X\": 5}",
    "B": {Y: 6}
}
Run Code Online (Sandbox Code Playgroud)

但是,我需要的是(不带引号A):

{
    "A": {"X": 5},
    "B": {"Y": 6}
}
Run Code Online (Sandbox Code Playgroud)

实际上,我的A属性有一个非常复杂的 JSON 字符串,该字符串已被另一个系统序列化。

解决方法是A首先对我的属性进行反序列化,然后让 JSON.NET 将其序列化回来,但这很浪费并且混淆了代码的意图。

如何告诉 JSON.NET 使用属性的字符串表示形式进行序列化,而不是为我序列化它?

编辑:

我最初的想法是创建一个名为JsonVerbatim包装字符串的新类型,并为该新类型提供一个自定义转换器,直接输出该字符串。

.net c# serialization json json.net

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

将预编译头与静态库项目一起使用

我需要一些关于如何设置我的项目的建议.我正在构建一个静态库,并想知道在我走得太远之前我使用预编译头的方式是否正确.

到目前为止,我的stdafx文件只包括(对于类似DWORD等类型)和(对于std :: string).

我构建了一个名为TestFuncs.cpp/h的简单cpp/header组合

TestFuncs.cpp:

#include "stdafx.h"
using namespace std;
void MyFunc(DWORD a, string b) {
    // irrelevant
}
Run Code Online (Sandbox Code Playgroud)

TestFuncs.h

#pragma once
void MyFunc(DWORD a, std::string b);
Run Code Online (Sandbox Code Playgroud)

这里的代码编译正确.我遇到的问题是当我想在另一个项目中使用这个静态库时,我通常会做#include"path_to_my_static_lib_project/TestFuncs.h"

但是,这个问题基于TestFuncs.h,当时DWORD和string都是未知的,因为它们是从stdafx.h文件定义的类型.

我提出的一个解决方案(我不知道这样做是正确的)只是在#pragma一次之后将stdafx.h包含在TestFuncs.h的顶部.现在,项目使用预编译头文件工作文件.

这是应该怎么做,还是有正确的方法这样做?

谢谢.

c++ static-libraries precompiled-headers

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

使用字段指定泛型类型

假设我有以下课程:

public class MyClass
{
    public decimal myDecimal;
    public string myString;
}
Run Code Online (Sandbox Code Playgroud)

我想使用DataRowExtensions方法Field <>

目前,我正在使用这样的类:

MyClass myClass = new MyClass();
myClass.myDecimal = row.Field<decimal>("MyDecimalColumnName");
myClass.myString = row.Field<string>("MyStringColumnName");
Run Code Online (Sandbox Code Playgroud)

但是,如果我决定将myDecimal的类型更改为其他类型decimal,我希望调用row.Field能够反映正确的数据.

我想要类似于以下语法的东西:

myClass.myDecimal = row.Field<typeof(myClass.myDecimal)>("MyDecimalColumnName");
Run Code Online (Sandbox Code Playgroud)

这不会编译,我不知道如何使用typeofGetType()只返回decimal,无论调用什么.

有没有办法做到这一点,或类似的东西?我认为这可以在编译时完成,因为类型已经知道,并且因为泛型是编译时构造.

谢谢!

c# generics typeof datarow gettype

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

将模型提交到与视图模型类型不同的操作

我有两个型号:

public class PersonViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
}

public class DetailViewModel
{
     public IEnumerable<string> Titles { get; set; }
     public PersonViewModel Person { get; set; }         
}
Run Code Online (Sandbox Code Playgroud)

表格中有两个字段,第一个字段是Name,第二个字段是下拉列表Titles(Mr.,Mrs. Miss.等)

此页面的视图是强类型的DetailViewModel,并且Save控制器中的方法接受类型的参数PersonViewModel.

由于视图强类型化为与表单操作的参数类型不同的类型,因此HttpRequest中的名称与MVC在操作中期望的名称不匹配.

是否可以让MVC正确绑定模型不匹配无需手动指定表单字段名称?(例如,我仍然想使用@Html.TextBoxFor(m => m.Person.Name))

为了澄清,提交的表单字段名称类似于以下内容:

Person.Name =马修&Person.Title =先生.

我需要以下内容(用于模型绑定工作):

名称=马修&标题=先生.

.net c# asp.net asp.net-mvc asp.net-mvc-5

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

.Net.Mail新行

我正在使用.Net.Mail发送短信,但我在插入新行时遇到问题.我已经搜索了包括StackOverflow在内的互联网,以寻找实现此目的的方法.我发现了几个但没有它们起作用.我使用StringBuilder来构建消息的主体,但是添加新行或空行确实会在消息中插入新行.我也试过"\n"和其他几种方法但似乎没什么用.我在下面添加了我的代码.有谁知道我怎么做到这一点.提前感谢您提供的任何帮助.

string cellPhone = reader.GetString(reader.GetOrdinal("CellPhone"));
string suffix = reader.GetString(reader.GetOrdinal("Suffix"));
StringBuilder body = new StringBuilder();
cellPhone = cellPhone.Trim().Replace(" ", "").Replace("-", "").Replace("(", "").Replace(")", "");
if (!suffix.StartsWith("@"))
{
    suffix = "@" + suffix;
}
string address = cellPhone + suffix;
reader.Close();

EMail email = new EMail("mail.yyy.com");
email.IsHTML = true;
email.Subject = "Sales Lead from yyy.com";
email.Add_ToAddress(address, false);
body.AppendLine(" ");
body.AppendLine("Name: " + this.tbSalesLeadName2.Text + "EMail: mailto: " + this.tbSalesLeadEmail2.Text);

if (!this.chkSalesLeadEmail2.Checked)  //&& (!this.hidCellPhoneProvider.Value.Equals("0", StringComparison.InvariantCultureIgnoreCase)))
{
    body.AppendLine("Phone: " + this.tbSalesLeadPhone2.Text);
    body.AppendLine("Cell Phone: " + …
Run Code Online (Sandbox Code Playgroud)

c# mailmessage

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