我正在使用NLog日志记录框架,我正在尝试获取异常和堆栈跟踪信息,这些信息显示在任何UDP记录器应用程序中,例如Sentinel和Log2Console,但只能显示日志消息部分.输出到文件的效果很好,因为大多数示例都是如此,因此问题围绕着使用NLog的网络目标.
如果自定义格式可以应用于内部异常和堆栈跟踪,则可以获得奖励,但这不是必需的.Exception.ToString()会有很长的路要走.
关于示例代码的注意事项:使用Log2Console,我发现了一篇关于如何将异常作为单独的日志条目发送的文章.虽然这很有效,但我对解决方案并不满意.
示例异常记录代码:
Logger Log = LogManager.GetCurrentClassLogger();
try
{
throw new InvalidOperationException("My ex", new FileNotFoundException("My inner ex1", new AccessViolationException("Innermost ex")));
}
catch (Exception e)
{
Log.ErrorException("TEST", e);
}
Run Code Online (Sandbox Code Playgroud)
示例NLog.config:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets async="true">
<!-- Send by UDP to Sentinel with NLogViewer protocol -->
<target name="network" xsi:type="NLogViewer" address="udp://192.168.1.3:9999" layout="${message}${onexception:inner=${newline}${exception:format=tostring}}" />
<!-- Send message by UDP to Log2Console with Chainsaw protocol -->
<target name="network2" xsi:type="Chainsaw" address="udp://192.168.1.3:9998" …Run Code Online (Sandbox Code Playgroud) 我有一个由BinaryFormatter序列化到磁盘的C#类,例如:
// Version 3.0
[Serializable]
public class Person
{
public string FullName;
[OptionalField(VersionAdded=2)]
public string NickName;
[OptionalField(VersionAdded=2)]
public DateTime BirthDate;
[OptionalField(VersionAdded=3)]
public int Weight;
}
Run Code Online (Sandbox Code Playgroud)
稍后,我想通过以下一个或多个来重构此类
- 更改其名称
- 更改其命名空间
- 移动到另一个程序集
据我所知,只有具有完全相同名称,命名空间和程序集名称的类可用时,才能对二进制文件进行反序列化.
我该如何解决这个问题?
是否可以将反序列化映射到不同的类名,命名空间和程序集,而不会破坏版本容错序列化?
我无法从WCF Web服务反序列化结果.该方法返回一个List<RecipeEntity>,序列化为XML,如下所示.当我尝试反序列化时,我得到一个异常,如下所示.看来我无法反序列化<ArrayOfRecipe>到List<RecipeEntity>.请注意,RecipeEntity按合同名称映射到Recipe.
在搜索之后,我看到很多人提出了XmlArray和XmlElement属性,但据我所知,它们不适用于此GetRecipes()方法.我只看到它们用在序列化类的字段上.
我知道我可以将它包装List<RecipeEntity>在一个RecipeList类中并返回它,但我宁愿直接反序列化为任何给定类型的List <>.
例外:
System.InvalidOperationException was caught
Message=There is an error in XML document (1, 2).
StackTrace:
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, Object events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader)
at GroceriesAppSL.Pages.Home.GetRecipesCallback(RestResponse response)
InnerException: System.InvalidOperationException
Message=<ArrayOfRecipe xmlns='Groceries.Entities'> was not expected.
StackTrace:
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderList1.Read5_Recipe()
InnerException:
Run Code Online (Sandbox Code Playgroud)
数据合同:
[DataContract(Name = "Recipe", Namespace = "Groceries.Entities")]
public class RecipeEntity
{
[DataMember] public int Id;
[DataMember] …Run Code Online (Sandbox Code Playgroud) 我正在使用外部API,它根据计数返回属性作为数组或对象.处理这个问题的好方法是什么?
作为数组返回:
{
"contacts": {
"address": [
{
"id": "47602070",
"type": "Work",
"street": "MyStreet",
"city": "MyCity",
"zip": "12345",
"country": "USA"
},
{
"id": "47732816",
"type": "GPS",
"street": "50.0,30.0"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
作为对象返回:
{
"contacts": {
"address": {
"id": "47602070",
"type": "Work",
"street": "MyStreet",
"city": "MyCity",
"zip": "12345",
"country": "USA"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在想一个解决方法是使用自定义反序列化器并返回一个长度为1的数组用于对象大小写,并为数组大小写默认反序列化,但我不知道该怎么做.
我尝试将对象反序列化为一个数组,并希望Json.net能为我处理这个案例,但没有骰子.
我正在使用Entity Framework 5.0 RC与预配置了VS 2012 RC的LocalDB数据库进行一些原型设计和代码优先数据库的测试.
经过几个周期的更改我的代码优先数据库和运行"更新数据库"后,我做了一个巨大的改变,自动迁移失败了.我不关心解决这个冲突,因为这只是原型设计,所以丢失数据很好.
如何重置或删除数据库?重置还必须重置迁移表,这似乎在Visual Studio中的服务器资源管理器中隐藏.
我知道浮点精度在常规情况下是如何工作的,但我偶然发现了我的C#代码中的奇怪情况.
为什么result1和result2在这里不是完全相同的浮点值?
const float A; // Arbitrary value
const float B; // Arbitrary value
float result1 = (A*B)*dt;
float result2 = (A*B);
result2 *= dt;
Run Code Online (Sandbox Code Playgroud)
从这个页面我认为浮动算术是左关联的,这意味着值以从左到右的方式进行评估和计算.
完整的源代码涉及XNA的Quaternions.我不认为我的常量是什么以及VectorHelper.AddPitchRollYaw()的作用.如果我以相同的方式计算三角形俯仰/滚转/偏航角度,测试通过就好了,但是由于代码低于它不通过:
X
Expected: 0.275153548f
But was: 0.275153786f
Run Code Online (Sandbox Code Playgroud)
[TestFixture]
internal class QuaternionPrecisionTest
{
[Test]
public void Test()
{
JoystickInput input;
input.Pitch = 0.312312432f;
input.Roll = 0.512312432f;
input.Yaw = 0.912312432f;
const float dt = 0.017001f;
float pitchRate = input.Pitch * PhysicsConstants.MaxPitchRate;
float rollRate = input.Roll * PhysicsConstants.MaxRollRate;
float yawRate = input.Yaw * PhysicsConstants.MaxYawRate;
Quaternion …Run Code Online (Sandbox Code Playgroud) 我想在我的C#项目中使用UnitsNet,并在文档中看到作者正在使用他们的类来解析来自字符串的度量单位,如下所示:
var usEnglish = new CultureInfo("en-US");
Mass kg = Mass.Parse(usEnglish, "1.0 kg");
Run Code Online (Sandbox Code Playgroud)
我想以同样的方式使用它,所以我通过调用使用nuget控制台在我的项目中安装了包:
Install-Package UnitsNet
Run Code Online (Sandbox Code Playgroud)
并确保在项目中添加引用.
问题是我仍然无法在任何单元类型上看到Parse()/ TryParse()方法.
我做错了什么,或者文档是否过时了?
我正在使用ASP.net MVC4模板的内置SimpleMembership,并希望创建一个管理面板来重置用户群上的密码和类似操作.
我使用SecurityGuard.MVC4 nuget作为起点,并在大多数操作中获得NotSupportedException.SecurityGuard使用控制器的Membership属性在SimpleMembershipProvider上调用诸如GetAllUsers(),GetUser()和ResetPassword()之类的方法,并且它们都抛出NotSupportedException.从文档中看,这似乎是设计的:
SimpleMembershipProvider.GetAllUsers
注意:如果使用对WebSecurity.InitializeDatabaseConnection()方法的调用初始化SimpleMembershipProvider类,则不支持此方法,并将抛出NotSupportedException异常.但是,如果尚未调用WebSecurity.InitializeDatabaseConnection()方法,并且已将站点配置为使用标准ASP.NET成员资格提供程序,则此方法将传递给标准成员资格提供程序.
我错过了什么?看来我需要选择使用WebSecurity来处理WebSecurity.CreateUser()之类的标准内容并直接使用提供程序吗?
我可以解决这个问题,但我很担心为什么我不能同时解决这个问题?
c# ×4
.net ×2
arrays ×1
asp.net ×1
exception ×1
json ×1
json.net ×1
list ×1
localdb ×1
networking ×1
nlog ×1
precision ×1
refactoring ×1
reset ×1
sentinel ×1
stack-trace ×1
versioning ×1
wcf ×1
xml ×1