我已经看到很多关于将相对URL解析为绝对路径的教程,但我想反过来:将系统绝对文件路径解析为相对URL.
是否有一个很好的免费下锅的办法把一个文件路径就像c:\my_website_root\images\picture_a.jpg
进入images/picture_a.jpg
我已经看过了,Uri.MakeRelative()但我不认为它会在这种情况下使用.
编辑:我已经实现了这样,仍然看起来很hacky(特别是第2行)
var urlPath = new Uri(@"c:\mywebfolder\images\picture1.jpg");
var urlRoot = new Uri(Server.MapPath("~")+"/");
string relative = urlRoot.MakeRelativeUri(urlPath).ToString();
Run Code Online (Sandbox Code Playgroud) 出于某种原因,我真的无法理解,每当我尝试将文件与其服务器版本进行比较时,Visual Studio就会冻结.它在底部显示此消息:
在后台运行比较操作.操作完成后,结果将显示在比较工具中.
更奇怪的是,它只会在一个特定的解决方案中冻结,并且在其他所有解决方案中都能正常工作.
有没有人遇到过这个问题?如果是这样,你是如何解决的?
这是我到目前为止所尝试的:
这些都没有任何区别.
此外,常见的TFS操作(如签入和签出)也能正常工作.
感谢您的任何帮助,您可以提供.
有关环境的更多详情:
关于解决方案的更多细节:
我正在研究一个库存软件,突然发现我需要一些主要形式,我应该通过它打开所有其他形式,所以我创建了一个名为frmMainPanel并使用菜单条将其链接到另一个我成功链接它们但是它们在主窗体之外打开,我使用以下代码链接它们
使用以下方法链接frmSaleInvoice表单:
frmSaleInvoice childForm = new frmSaleInvoice();
cs.show()
Run Code Online (Sandbox Code Playgroud)
现在我意识到我应该让他们成为主要形式的孩子,所以我尝试使用以下代码:
frmSaleInvoice childForm = new frmSaleInvoice();
childForm.MdiParent = this;
childForm.Show();
Run Code Online (Sandbox Code Playgroud)
但它说 **" Form that was specified to be the MdiParent for this form is not an MdiContainer."**
任何人都可以帮助我,我错了,我怎么能把一个名为frmSaleInvoice的表格制作成名为frmMainPanel的其他形式的孩子
在使用CC的特定项目上,构建时在visual-studio-2013的错误列表窗口中显示以下消息:
CodeContracts:无法连接到缓存.CodeContracs静态检查将无法运行
谷歌搜索的时候,我已经找到了这里,这是可以跟踪尝试连接到使用以下额外的静态检查选项缓存:
-trace:缓存
然后CC输出变得更加冗长:
所以,这似乎是CC引擎内部的一个内部错误,它将分析信息存储到内部创建的缓存中的方式(我没有指定我的任何Sql服务器用于缓存).
我设法发现默认缓存文件存储在AppData/Local/CodeContracts中.不幸的是,即使删除整个目录也无法解决问题.
关于下一步应该是什么的任何想法?
我的问题:
我列出了118个化学元素名称.我希望制作一个文本框,当我输入它时会抛出一个带有名字提示的下拉菜单.我在winforms中创建了这个文本框,但这是一块蛋糕,但是我在wpf中制作它的努力是徒劳的.我尝试过扩展的wpf工具包,nimgoble和其他一些自动完成文本框库.到目前为止死胡同...我也是wpf的新手,所以也许我错过了这些libs的东西?我不能让他们列出我的项目,有些甚至不会显示下拉菜单.
继承人我想要的:
这是我最终实现它的方式:
所以我通过使用文本框和列表框的组合解决了这个问题.在文本框用户类型和更改(文本框已更改事件)的位置,它检查列表中的匹配项,该列表包含所有118个元素的名称,并显示列表框内输入的文本的匹配项.这是代码:
private void textBox_TextChanged(object sender, TextChangedEventArgs e)
{
listBox.Items.Clear();
if (textBox.Text.Trim() != "")
{
string regexPattern = (textBox.Text.ToString()) + "\\w*";
regexPattern = char.ToUpper(regexPattern[0]) + regexPattern.Substring(1); //prvo slovo veliko
Match match = Regex.Match(ElementNames.allElements, regexPattern);
while (match.Success && match.Value != "")
{
listBox.Items.Add(match.Value.ToString());
listBox.Visibility = Visibility.Visible;
match = match.NextMatch();
}
}
if (listBox.Items.IsEmpty || listBox.Items.Count == 119)
{
listBox.Visibility = Visibility.Collapsed;
if (listBox.Items.Count == 119) listBox.Items.Clear();
}
HighlightElementsOnTable();
OtherButtonsHighlight();
BringBackColors();
}
Run Code Online (Sandbox Code Playgroud) 我试图使用反射拉出项目名称,但在substring方法中它给我"索引超出范围的错误".
string s = System.Reflection.Assembly.GetExecutingAssembly().Location;
int idx = s.LastIndexOf(@"\");
s = s.Substring(idx, s.Length);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它会在第三行给出错误.
Plz帮助.
我正在尝试使用以下查询从两个表中删除几行
Delete top(3) ss
from stage.SubmitItemData ss
INNER JOIN stage.SubmitItems s (NOLOCK) on ss.SubmitItemId = s.SubmitItemId
where s.AgencyCode = 'NC0860000' and s.StatusId = 8
Run Code Online (Sandbox Code Playgroud)
我被难住的地方是,如果我删除参数s.AgencyCode并且s.StatusId查询执行没有问题。但是,如果我添加这些参数,我会得到(0) rows affected.
我想要做的就是控制在任何给定时间删除的记录数。top(n) 不是最好的方法,因为它看起来好像需要订购才能工作?为这种类型的删除创建一个循环会更好吗?
感谢您的任何建议。
遗留应用程序在启动时处于无限循环中; 我不知道为什么/如何(代码混淆竞赛候选人),但关于被反复调用的方法(从其他几种方法调用),我想,"我想知道是否有一种调用此方法的方法还在调用另一个也叫它的方法?"
我想:"不,编译器能够解决这个问题,而不是允许它,或者至少发出警告!"
所以我创建了一个简单的应用来证明这种情况:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
method1();
}
private void button2_Click(object sender, EventArgs e)
{
method2();
}
private void method1()
{
MessageBox.Show("method1 called, which will now call method2");
method2();
}
private void method2()
{
MessageBox.Show("method2 called, which will now call method1");
// Note to self: Write an article entitled, "Copy-and-Paste Considered Harmful"
method1();
}
}
Run Code Online (Sandbox Code Playgroud)
...但不是!它编译得很好.为什么编译器不会将此代码标记为最可疑?如果任何一个按钮被捣碎,你就永远不会降落!
好的,有时您可能需要无限循环(起搏器代码等),但我认为应该发出警告.
恕我直言,因为任何其他程序员都可以调用带参数的公共方法,它有责任验证参数值并抛出有意义的ArgumentException,如果它们中的任何一个都无效.
话虽如此,为什么我更喜欢这个:
public void Toto(string parameter)
{
Contract.Requires(parameter != null);
//...
}
Run Code Online (Sandbox Code Playgroud)
......这个?
public void Toto(string parameter)
{
if (parameter == null)
throw new ArgumentNullException(nameof(parameter));
//...
}
Run Code Online (Sandbox Code Playgroud)
在第一个场景中,必须启用运行时协定检查才能抛出异常.我们知道,对于发布版本,可能不会检查此选项,这意味着不会发生参数验证.对于任何您可能会或可能不知道作为已发布产品的一部分的人使用的公共方法,这似乎是一个坏主意.
即使为发布版本启用了运行时检查,将抛出的异常也不会是典型的.NET开发人员所期望的(ArgumentNullException在本例中).
那我错过了什么?为什么我会使用代码契约而不是"传统的"if-throw模式?
在重新发明轮子之前,是否有一种标准方法可以在SQL Server连接字符串中隐藏至少一个密码?
(用C#编写)
我有一个高度多线程的应用程序,它知道多个数据库,因此为了帮助进行故障排除和调试,可以记录连接字符串的各个位置.我无法控制使用此产品的客户使用什么连接字符串,因此在其中找到密码并不常见.我知道这是因为它也并不少见,人们打开调试级记录,并给我们的日志文件有问题报告一起,这些日志中包含的数据库密码(和结果我们的支持票系统包含口令).
我知道最好的做法是不要把连接字符串中的密码,但一部分是出于我的控制(当然,除非我们改变我们的应用程序,所以它拒绝,如果你给它用未加密的密码连接字符串跑......这似乎对我来说有点严厉).
真的希望我想要它的日志是:
Server=myServerAddress;Database=myDataBase;User Id=****;Password=*****;
Run Code Online (Sandbox Code Playgroud)
(如果用户ID /名称是否是敏感信息,或者/或者对于日志记录是否有用 - 我对此表示欢迎).
我可以构建一个简单的正则表达式(例如/Password=[^;]+/),但在此之前,我只是想看看是否还有其他情况我不考虑,特别是如果已经完成的话.