我在Visual Studio 2010中单独使用Git作为我的本地软件项目.最近我创建了一个新的分支来对其中一个对话窗口进行更大的重构.我做了以下修改:
我将这个更改检查到了分支,比如表单重构.有趣的是,Git并没有注意到我将文件Form1.cs重命名为Form1a.cs并创建了一个全新的,完全不同的Form1.cs,但它发现了一个新的Form1a.cs文件并发现了它之间的很多差异.以前和新的Form1.cs文件.这当然会导致完全无用的差异,但在这种情况下我不在乎,只要最终正确处理所有文件.
然后我切换回主人做了一些其他的小改动.没有任何冲突.到现在为止,一切正常.
今天,我想切换回我的分支表格 - 重构以继续这项工作.但我得到的是以下信息:
git.exe checkout form-refactoring
Aborting
error: The following untracked working tree files would be overwritten by checkout:
Form1.Designer.cs
Please move or remove them before you can switch branches.
Run Code Online (Sandbox Code Playgroud)
应该是什么?提到的文件不是未跟踪的.既不在主分支中,也不在形式重构分支中.它是两个分支的一部分,但一个不是另一个分支的后代.如果我删除它会发生什么,它会好转吗?如果我现在删除了某些东西,我不相信Git会带回正确的文件.除了我提到的Git操作之外,我根本没有使用任何文件,那么我为什么要玩任何文件来继续使用Git操作呢?Git打破了它,Git现在应该处理它!
现在,我无法继续工作,因为我无法切换分支.有一个简单的解决方案吗?
Git版本是1.7.6,TortoiseGit是1.7.3.
我在C#.NET 4.0中编写网络服务器.有一个网络TCP/IP连接,我可以通过它连接完整的XML元素.他们定期到达,我需要立即处理它们.每个XML元素本身都是一个完整的XML文档,因此它有一个开放元素,几个子节点和一个结束元素.整个流没有单个根元素.所以当我打开连接时,我得到的是这样的:
<status>
<x>123</x>
<y>456</y>
</status>
Run Code Online (Sandbox Code Playgroud)
然后一段时间后它继续:
<status>
<x>234</x>
<y>567</y>
</status>
Run Code Online (Sandbox Code Playgroud)
等等.我需要一种方法来读取完整的XML字符串,直到状态元素完成.我不想用纯文本阅读方法这样做,因为我不知道数据的格式是什么.我无法等到整个流完成,正如其他地方经常描述的那样.我已经尝试使用XmlReader类,但它的文档很奇怪,方法无法解决,第一个元素丢失,在发送第二个元素后,发生XmlException,因为有两个根元素.
在Windows/.NET上,可以使用命名的Mutex来同步多个进程.不幸的是,Mono并不完全支持Linux.他们的发行说明说Linux不支持这种Windows功能,并且模拟它是不可靠的.无论如何,最好避免建议的黑客攻击.
那么建议的替代品是什么?我需要让我的程序安全地同时运行,只需要将其中的一小部分与其他实例同步.
该应用程序最终需要部署在带有Mono 2.10的Ubuntu Linux上,但是对于测试,如果它也可以在带有.NET 4的Windows 7上运行,那将非常受欢迎.
Windows 任务计划程序可以创建使用特定用户的帐户运行的任务,而无需存储用户密码。他们称之为“S4U”,即为用户服务。这应该类似于调度程序为当前用户创建这样的令牌,并可以使用它在该用户帐户下运行计划的进程。他们声称无法使用该系统访问网络或加密资源。调度程序本身使用 SYSTEM 帐户运行才能工作。这是一篇描述它的文章。其中的相关引用:
TASK_LOGON_S4U 是另一个提供更安全替代方案的选项。它利用用户 (S4U) 登录服务代表指定用户运行任务,但无需存储密码。由于任务计划程序在本地系统帐户内运行,因此它可以创建 S4U 登录会话并接收令牌,该令牌不仅可用于识别,还可用于在本地计算机上进行模拟。通常,S4U 令牌仅用于识别。
我需要在我的应用程序中使用此身份验证方案,但不能让任务计划程序执行此操作,而是需要自己执行此操作,因为我需要它用于任意数量的帐户。每当用户向我的应用程序注册任务时,任何后续任务都必须在同一用户下运行。但由于它们不能重叠,所以我需要自己进行序列化。
我找不到关于这个“S4U”的任何信息。我如何在我的应用程序中实现它?首选 C#,但 WINAPI 和 C 也可以。
更新:这是我尝试过的,但它不起作用。
// The WindowsIdentity(string) constructor uses the new
// Kerberos S4U extension to get a logon for the user
// without a password.
WindowsIdentity wi = new WindowsIdentity(identity);
WindowsImpersonationContext wic = null;
try
{
wic = wi.Impersonate();
// Code to access network resources goes here.
}
catch()
{
// Ensure that an exception is not propagated higher in the call …
Run Code Online (Sandbox Code Playgroud) Visual Studio 2015已将IIS Express配置文件从"我的文档"移动到其自己的隐藏.vs目录中,并告知IISExpress.exe使用该配置文件.
虽然当您有多个具有冲突配置的Web应用程序时,这可能听起来不错,但事实上,当您拥有自定义配置的Web应用程序时,情况并非如此.因为此配置文件位于临时目录中,当从源代码管理中检出代码到新位置时,或者在清理一般情况时,可以删除该目录.
Documents文件夹中的旧位置是一个中心位置,其中的文件通常不会被删除.如果我需要对此文件进行一些更改,比如允许应用程序使用Windows身份验证,我会编辑此文件一次,然后我就完成了.现在有了新位置,我可能需要多次进行这些更改.由于有两个配置文件(旧的位置对我来说仍然存在),它更令人困惑.
那么你不应该将.vs中的任何内容提交到版本控制中,因此甚至不可能与其他团队成员共享这些自定义.
建议的更新applicationhost.config文件的方法是什么,以便它提供Web应用程序所需的环境?是否有可以在前/后构建步骤中运行的工具?是否有可以从.vs合并到默认文件中的自定义XML文件?
是否可以从源代码管理中检出Web应用程序并让它在本地IIS Express中运行?或者在获取代码和web.config后是否总是需要手动更正?
PS:我忘记了一件事:<UseGlobalApplicationHostFile>
项目文件中的元素可以设置为true
,但是一旦我这样做,每次我想启动Web应用程序时都会收到拒绝访问错误消息.所以这似乎不太好用.
我有这样的代码来发出加载整数或字符串值的IL代码.但我不知道如何添加decimal
类型.该方法不支持它Emit
.对此有何解决方案?
ILGenerator ilGen = methodBuilder.GetILGenerator();
if (type == typeof(int))
{
ilGen.Emit(OpCodes.Ldc_I4, Convert.ToInt32(value, CultureInfo.InvariantCulture));
}
else if (type == typeof(double))
{
ilGen.Emit(OpCodes.Ldc_R8, Convert.ToDouble(value, CultureInfo.InvariantCulture));
}
else if (type == typeof(string))
{
ilGen.Emit(OpCodes.Ldstr, Convert.ToString(value, CultureInfo.InvariantCulture));
}
Run Code Online (Sandbox Code Playgroud)
不工作:
else if (type == typeof(decimal))
{
ilGen.Emit(OpCodes.Ld_???, Convert.ToDecimal(value, CultureInfo.InvariantCulture));
}
Run Code Online (Sandbox Code Playgroud)
编辑:好的,所以这就是我做的:
else if (type == typeof(decimal))
{
decimal d = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
// Source: https://msdn.microsoft.com/en-us/library/bb1c1a6x.aspx
var bits = decimal.GetBits(d);
bool sign = (bits[3] & 0x80000000) != 0;
byte scale = …
Run Code Online (Sandbox Code Playgroud) 我设计了一个Windows窗体对话框,应该可以在其他应用程序,WPF和Windows窗体中重用.当我在Windows窗体应用程序中使用它时,这可以正常工作,但在WPF应用程序中调用时会导致一些布局问题.从屏幕上的像素,WinForms API所说的以及Spy ++中测量的尺寸和大小是不一致的.窗口宽10像素,在没有调试器的情况下运行比Spy ++说的更高,并且比我说它应该是.这有什么问题?我找不到任何东西,只是说它是一个严重破坏的.NET Framework.
这是Form类代码:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace DialogTestApp
{
internal class MyDialog : Form
{
public MyDialog()
{
Text = "Title";
Width = 500; // -> actually 510 (Spy++ says 500)
Height = 300; // -> actually 310 (Spy++ says 300)
Font = SystemFonts.MessageBoxFont;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
TableLayoutPanel mainLayout = new TableLayoutPanel();
mainLayout.BackColor = Color.FromArgb(255, 171, 255); // pink
mainLayout.Dock = DockStyle.Fill; …
Run Code Online (Sandbox Code Playgroud) 我需要systemctl start myservice
在 Bash 脚本接近结尾时调用,但我真的不关心它是否会成功或它何时返回。我只需要开始行动。监视该服务的状态是其他人的任务。我的脚本应该尽快返回,无论该服务是否已完成启动,我不依赖于此。
我的第一个想法是使用这样的东西:
# do other work
systemctl start myservice &
echo "done"
# end of script
Run Code Online (Sandbox Code Playgroud)
但我读到,这对于信号或在通常调用我的脚本的非交互式环境中是有问题的。所以我继续阅读并找到了该nohup
命令,但这似乎会在任何地方写入输出文件,并且如果您不从 /dev/null 重定向标准输入,可能会挂起,他们说。
所以我仍然不知道如何正确地做到这一点。我愿意采用一种通用的方式来从 Bash 脚本启动并忘记任何进程,或者systemctl
特别地,因为这将是我目前唯一的用例。
我有一个1-Wire USB适配器(蓝色的那个),并希望从一个小型Linux机箱中使用它来监控温度.Linux盒子现在已经无序了,所以在此期间我想在我的Windows桌面上使用基于.NET的监控软件来记录温度.但似乎并没有一个可用的.NET .NET库.Maxim SDK附带的那个需要J#,我没有并且想要使用它.我甚至不确定我是否可以在基于.NET 4.0的应用程序中使用它,因为J#已经停止使用AFAIK.SourceForge(owdotnet)上的另一个"开源工作"是在2008年,看起来已经死了.甚至没有关于它的任何信息页面.Maxim的SDK还带有一个"紧凑型.NET"版本,至少可以找到连接到适配器的设备,但我需要实现整个1-Wire协议本人似乎(发送原始字节,等待一小会儿,那种东西).所以这对现在没什么帮助.谷歌没有找到任何其他东西.你呢?
我的印象是整个1-Wire的东西已经死了.它只能在Linux系统上使用(使用owfs,编译起来很庞大),整个产品生态系统并不完全活跃.还有哪些其他解决方案可以测量温度,环境参数(湿度,水,压力等)和状态(如打开的门),甚至可以切换不需要花钱的东西(打开和关闭灯)(和"家庭自动化"一样)?并且最好也可以从.NET代码访问?
在DbSet
实体框架(6.1.3)的实体集合中,当我添加新项目时,之后不会从集合中返回它.这很奇怪也很意外.以下是一些收集的示例代码:
dbContext.Entities.ToArray();
// contains 3 entries
dbContext.Entities.Add(new Entity());
dbContext.Entities.ToArray();
// still contains 3 entries
Run Code Online (Sandbox Code Playgroud)
怎么会这样?当我dbContext.Entities
在Visual Studio的即时窗口中查询时,它会显示"Local:Count = 4"之类的内容.为什么它会隐藏我的新物品?
更新:如果此集合没有做明显的事情 - 返回之前添加的内容 - 我需要做什么呢?它必须在首次调用时返回数据库中的所有记录,并且在以后调用时还必须包括所有更改(添加和删除).SaveChanges
仅在用户完成编辑后调用.之前需要收藏!SaveChanges
也可以在用户完成编辑之间的某处调用,但代码可能会返回,并且稍后会再次显示视图.