小编Sim*_*mon的帖子

WIX自定义操作调试不起作用

我试图调试我的自定义操作.我把Debugger.Break()放入自定义动作cs.当我构建自定义操作时,它会创建以下文件:

myCustomAction.dll
myCustomAction.CA.dll
myCustomAction.pdb
Run Code Online (Sandbox Code Playgroud)

在wix项目中,我在二进制标记(而不是myCustomAction.dll)中引用了myCustomAction.CA.dll.既然不存在myCustomAction.CA.pdb这是调试不起作用的原因吗?当显示消息框时,我也尝试使用消息框并附加到进程.但我收到以下消息:无法找到或打开PDB文件.

我做错了什么?我有wix 3.5版和visual studio 2010.

c# windows-installer wix

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

反射 - 使用参数调用构造函数

我从加载的程序集中读取类型,例如:

var someType = loadedAssemblies
            .Where(a => a != null && a.FullName.StartsWith("MY."))
            .SelectMany(a => a.GetTypes())
            .Distinct()
            .ToArray()[0];
Run Code Online (Sandbox Code Playgroud)

如果counstructor有参数,我可以读它们:

ParameterInfo[] parameters = classType.GetConstructors()[0].GetParameters();
Run Code Online (Sandbox Code Playgroud)

我想用默认参数值调用构造函数,或者如果参数是枚举,则使用第一个枚举值.如果只有一个参数并且它是枚举,则它的工作方式如下:

object curObject = Activator.CreateInstance(classType, new object[] { parameters[0].ParameterType.GetEnumValues().GetValue(0) });
Run Code Online (Sandbox Code Playgroud)

如果有更多参数,我该怎么做?我需要创建对象来读取属性:

var propertyInfo = someType.GetProperty("EntityType");
string entityType = propertyInfo.GetValue(curObject, null).ToString();
Run Code Online (Sandbox Code Playgroud)

c# reflection enums

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

在列表对象中排序

我从数据库中获取Sytem.Collections.generic.IList并过滤它searchText:

String searchText="E";
var query = something().List();
query = query.Where(x => !string.IsNullOrEmpty(x.Name) &&
x.Name.ContainsInsensitive(searchText)).ToList();
result = query.Select().ToList();
Run Code Online (Sandbox Code Playgroud)

现在我希望结果按Name列排序.首先是以所有值开头的searchText所有值,然后是包含的所有值searchText.

如果我写这个:

result = result.OrderBy(x => x.Name).ToList();
Run Code Online (Sandbox Code Playgroud)

我得到按名称排序的结果,例如:

1. "A name"    
2. "B name"
3. "E name"
4. "F name"
Run Code Online (Sandbox Code Playgroud)

所有这一切都包含eName.我想我的那种是:

1. "E name"    
2. "A name"
3. "B name"
4. "F name"
Run Code Online (Sandbox Code Playgroud)

我的OrderBy表情应该改变什么?

c# linq

9
推荐指数
2
解决办法
1259
查看次数

Newtonsoft 作为 jsonResult

我有 MVC 控制器方法,它应该返回 json 字符串。

public JsonResult myMethod()
{
  ....
  return Json(new { success = true, data = myObject });
}
Run Code Online (Sandbox Code Playgroud)

有用。但 myObject 的列顺序与定义的不同。(Json 根据定义返回无序的名称/值对集)

所以,我使用了 Newtonsoft,并在我的课堂上定义了排序顺序,如下所示:

public class myObject{

 [JsonProperty(Order = 0)]
 public int id { get; set; }

 [JsonProperty(Order = 1)]
 public string name { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

并且在MVC控制器中必须更改方法以返回字符串而不是JsonResult(我不知道如何使用newtonsoft返回jsonResult)。然后我返回字符串:

return "{ success = true, data = " + Newtonsoft.Json.JsonConvert.SerializeObject(myObject) + "}";
Run Code Online (Sandbox Code Playgroud)

它有效,字符串具有正确的列顺序,但 ajax 方法无法将此字符串识别为 json。那么,最好的解决方案是什么?如何从newtonsoft返回jsonResult而不是json字符串?

model-view-controller json

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

Microsoft.Data.Edm引用错误

我有Nopcommerce(NOP.Web)应用程序.当我构建此应用程序时, Microsoft.Data.Edm.dll内部BIN文件夹的版本为5.7.0.62414.

但是当我重建我的插件时,它被复制到Nop.Web应用程序中,这个dll的版本更改为5.6.4.62175.我收到以下错误:

无法加载文件或程序集"Microsoft.Data.Edm"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

所以,我想我的插件和Nop.Web中有一些参考不同

我怎么知道哪一个,我该怎么办?

我发现在"Nop.Web.Framework.csprojResolveAssemblyReference.cache"文件中有这个引用:

C:\ Program Files(x86)\ Microsoft WCF Data Services\5.6.4\bin.NETFramework\Microsoft.Data.Edm.dll

我找不到这个参考来自哪里.它也引用了同一文件中的正确dll(5.7.XX):

d:\ MyProjects下\库\ Nop.Services\BIN \调试\ Microsoft.Data.Edm.dll

在app.config我有这个:

bindingRedirect oldVersion ="0.0.0.0-5.7.0.0"newVersion ="5.7.0.0"/>

但是在构建时总是需要5.6.4.X版本的dll.

.net nopcommerce

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

Chrome工作区编码

我在chrome开发工具中启用了工作区.当我保存javascript文件(*.js)时,它具有ANSI编码 - 在它是UTF-8之前.如何在开发人员工具中保存文件时设置该文件保留原始编码?

encoding google-chrome developer-tools

6
推荐指数
0
解决办法
500
查看次数

将带方括号的字符串解析为 json

我想将此字符串解析为 Json:

String str="[{\"property\":\"insert_date\",\"direction\":\"ASC\"}]"
Run Code Online (Sandbox Code Playgroud)

我试过这个:

dynamic myObject=Newtonsoft.Json.JsonConvert.DeserializeObject(str)
Run Code Online (Sandbox Code Playgroud)

但它返回一些 JArray。我想读取简单的值,例如:

String dir=myObject.direction;
Run Code Online (Sandbox Code Playgroud)

一种选择是解析字符串并从字符串中删除方形对象。比它会工作。但我想以更正确的方式做到这一点。

c# json

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

诊断工具窗口不支持当前的调试配置

我想在 Visual Studio 2015 中使用诊断工具。当我尝试打开它时,收到以下消息:“诊断工具窗口不支持当前的调试配置”

此处描述了相同的问题: 诊断工具失败 我未选中“使用托管兼容模式”,也未选中“使用本机兼容模式”。即使我改变了,结果也是一样。我一直在尝试找到正确的调试配置,但到目前为止还没有成功。任何想法?我有 VS2015 Enterprise,版本 14.0.25425.01 更新 3。

visual-studio-2015 diagnostic-tools

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

在运行时创建通用对象列表

我在运行时有某种类型的对象,我从数据库中读取并反序列化了该对象。有用。现在,我想将其添加到一些列表中:

private static List<T> generateList<T>()
{
    List<T> lst = new List<T>();
    return lst;
}

private void readObjects(System.Type objType)
{
    var methodInfo = typeof(My.Serializator).GetMethod("DeserializeDb");
    var genericMethod = methodInfo.MakeGenericMethod(objType1);
    List<curType> currentList= generateList<curType>();
    // ...read stream from database and convert it to object
    while (_rs.Read())
    {
        var _objItem = genericMethod.Invoke(null, new[] { _streamedData });
        currentList.Add(_objItem);
    }
}
Run Code Online (Sandbox Code Playgroud)

它不会工作。错误是:

curType是一个变量,但像类型一样使用。

如果我将清单更改为:

 List<object> currentList = new List<object>(); 
Run Code Online (Sandbox Code Playgroud)

它会工作。但是我可以用generics(T)代替对象类型吗?

c# generics

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

没有 setter 就无法反序列化类型

我在数据库中有二进制序列化对象。它们是用 protobuf 序列化的。现在我需要生成一些查看器来查看数据库的内容。所以,我从数据库读取流并将其反序列化回对象。它有效,结果是对象列表:

var dbData = readData(someType);//it is IList collection
Run Code Online (Sandbox Code Playgroud)

现在,我想将此对象列表保存到文件中以查看数据库的内容。我认为最好将其保存为 xml。所以,我试过:

var serializer = new XmlSerializer(dbData.GetType());
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:无法反序列化类型“My.Entities.IdBase”,因为它包含没有公共 setter 的属性“Key”。

现在怎么办?我无法将类定义更改为具有 setter。我应该将对象保存为 json 还是纯文本?或者我应该提取所有属性和值并将其保存到某个 xml 中?任何代码示例?

c# xml

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