我创建了一个.Net Core R2类库,它有一些我用于几个不同平台的常用代码.某些代码在.Net Core平台中无效,因此我希望将其包含在条件编译符号中.我首先搜索了互联网,看看我是否能找到一个内置符号(如Silverlight应用程序的SILVERLIGHT和Windows 8应用程序的WINFX_CORE),但无法找到任何信息,所以我决定创建自己的符号.这似乎也不起作用.
从我阅读的所有内容中添加和使用符号应该很简单,只需在Project Properties中为条件编译符号添加一个值即可 构建标签.我做到了,但似乎确实有效.这里有几个屏幕截图......
请注意,我NET_CORE在条件编译符号中添加了一个值,但是当我在代码中使用它时,代码不会被忽略.
1)是否有人知道.Net Core平台是否有内置符号(我使用的是R2)?
2)如果没有,我在创建自己的符号时做错了什么?
.xproj文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>253184d7-9b42-4233-a871-8cfa3ee9e83e</ProjectGuid>
<RootNamespace>Linq2Db.NetCore</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>
Run Code Online (Sandbox Code Playgroud)
更新: 我能够使用提供的答案中的链接解决此问题.这是细节......
最初project.json文件看起来像这样......
{
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"frameworks": {
"netstandard1.5": {
"imports": …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用静默模式安装Java,并指定包含空格的安装目录.当我这样做时,它弹出"Windows Installer"对话框,指示其中一个参数不正确.如果我使用短路径名称它可以正常工作,但我真的不想使用短目录名称,因为这是存储在注册表中的值.
我想要使用的命令......
jre-6u39-windows-i586.exe /s INSTALLDIR="C:\Program Files (x86)\Java"
Run Code Online (Sandbox Code Playgroud)
这会弹出Windows Installer对话框.
当我用...
jre-6u39-windows-i586.exe /s INSTALLDIR=C:\Progra~2\Java
Run Code Online (Sandbox Code Playgroud)
这有效.
注意:"Program Files(x86)"只是一个例子.它安装在客户端站点并且他们选择安装目录,因此我们必须能够支持他们可能指定的任何目录.
知道如何进行静默安装,但仍然使用长路径名称?
更新:
我想我会分享最终解决方案.我发现我想分享的一个很酷的事情是你可以禁止自动重启安装,它会返回3010的退出代码.因此你可以将重新启动推迟到另一个时间.这是代码(重写了一点,以消除一堆我们自己的抽象)
public bool InstallJava(string installPath, string logFile)
{
bool rebootRequired = false;
string fullLogFileName = Path.Combine(logFile, "JavaInstall.log");
string arguments = string.Format("/s /v\"/qn REBOOT=Suppress INSTALLDIR=\\\"{0}\\\" STATIC=1 /L \\\"{1}\\\"\"", installPath, fullLogFileName);
ProcessStartInfo startInfo = new ProcessStartInfo { RedirectStandardError = true, RedirectStandardOutput = true, RedirectStandardInput = true, UseShellExecute = false, CreateNoWindow = true,
FileName = "jre-7u25-windows-x64.exe", Arguments = arguments };
var process = Process.Start(startInfo); …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取进程中的可用内存,以确保不会出现 OutOfMemoryException。我在互联网上搜索并找到了几个如何获取内存使用但不可用的示例。
让我提供用例...
我有一个正在执行批量插入的进程(使用 SqlBulkCopy)。我正在传递一个DataTable到WriteToServer方法中。我不能使用 aDataReader因为我必须能够在失败时重试该过程。我的第一个想法是一次选择任意数量的行插入,比如 50,000。但这是一个不知道数据的通用过程;它不知道列数,也不知道每行中的数据量。所以我想我可以在我向 中添加行时监视内存DataTable,然后SqlBulkCopy在它接近耗尽内存时将其发布到。
这是一种有效的方法还是有更好的方法?
如果这是一种有效的方法,我将使用什么函数来确定可用内存量?
到目前为止,这是我的代码......这AvailableMemoryIsLow是我无法弄清楚如何确定的。
// m_buffer is a read-once cache (implements IDataReader) that pulls
// data from an external source as needed so it uses very little memory.
// My original implementation just used m_buffer as the parameter of
// WriteToServer but now I have to add retry logic into the process.
DataTable dataTable = new DataTable(m_tableName); …Run Code Online (Sandbox Code Playgroud) 我在尝试加载XSLT样式表时遇到异常.XSLT样式表非常大(近8,000行).不幸的是,我对此没有任何控制权,而且我无法重构样式表以使其变小.
我们最近升级到.Net Framework 4.5.以下命令在升级之前工作得很好(我们使用的是.Net Framework 4.0).在升级之后,我们收到一条XsltException说"样式表太复杂"的transform.Load行.
我希望有一些新设置可以说"让这个命令按照它在4.0中的方式工作",但我找不到任何地方.
有没有人知道为什么这可能会突然成为4.5版本中的一个问题?怎么解决?
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(XmlReader.Create(report), new XsltSettings { EnableScript = true }, new XmlUrlResolver());
Run Code Online (Sandbox Code Playgroud)
report 是一个包含大型XSLT样式表的MemoryStream.
我正在使用Visual Studio 2015和Typescript创建Aurelia应用程序.我正在使用ASP.Net Core 1.0 R2.
在我编译应用程序之前,生成.js文件并在.ts文件之后显示(见图像).
昨天我做了一些他们停止生成的事情,我不知道我做了什么.我正在学习Typescript,所以对此不熟悉,开始知道在哪里看.我在互联网上搜索的唯一结果告诉我.js文件是在appBundle.js文件中创建的,但我认为这是旧信息,因为这不是我昨天之前看到的行为,而我的Aurelia应用程序没有运行,因为它说它无法找到.js文件.
任何人都可以了解我需要做什么才能再次生成.js文件?
更新:
我删除了app.html和app.ts文件并重新创建它们,然后重建项目,突然.js文件都出现了和我的应用程序现在运行正常.
不知道为什么这个问题解决了,可能是bug.
有人有任何见解吗?
javascript typescript visual-studio-2015 aurelia asp.net-core
我正在使用HtmlAgilityPack.我正在搜索所有P标签并在P标签内的样式中添加"margin-top:0px".
正如你所看到的那样,它有点"强制"使用margin-top属性.似乎必须有一个更好的方法来使用HtmlAgilityPack,但我找不到它,并且HtmlAgilityPack文档不存在.
谁知道更好的方法?
HtmlNodeCollection pTagNodes = node.SelectNodes("//p[not(contains(@style,'margin-top'))]");
if (pTagNodes != null && pTagNodes.Any())
{
foreach (HtmlNode pTagNode in pTagNodes)
{
if (pTagNode.Attributes.Contains("style"))
{
string styles = pTagNode.Attributes["style"].Value;
pTagNode.SetAttributeValue("style", styles + "; margin-top: 0px");
}
else
{
pTagNode.Attributes.Add("style", "margin-top: 0px");
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我已根据Alex的建议修改了代码.仍然想知道HtmlAgilityPack中是否有一些内置功能可以以更"DOM"的方式处理样式属性.
const string margin = "; margin-top: 0px";
HtmlNodeCollection pTagNodes = node.SelectNodes("//p[not(contains(@style,'margin-top'))]");
if (pTagNodes != null && pTagNodes.Any())
{
foreach (var pTagNode in pTagNodes)
{
string styles = pTagNode.GetAttributeValue("style", "");
pTagNode.SetAttributeValue("style", styles + margin);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2012.我创建了几个Web应用程序.有一次,我将项目设置为在运行启动项目时自动启动.现在我想改变那个选项,这样它们就不会启动,但我无法在任何地方找到它.我搜索了包括SO在内的互联网,似乎无法找到合适的关键字来查找能给我答案的搜索结果.它让我疯了!
有人可以告诉我如何告诉VS 2012不要自动启动?
谁能告诉我如何从C#中获取Visual FoxPro数据库中的表列表?
我尝试使用GetSchema但是回来的信息似乎只是计数(并不准确计算).
这是我的......
string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc";
using (var cmdSrc = new OleDbCommand())
using (var dbconnSrc = new OleDbConnection(connSrc))
{
dbconnSrc.Open();
DataTable schema = dbconnSrc.GetSchema();
}
Run Code Online (Sandbox Code Playgroud)
我认为可能有某种方式我可以直接打开dbc文件并对它运行SELECT但问题是数据库位于连接字符串的路径中.我找不到可以提取架构信息的OleDb命令.
编辑:
我找到了一种有效的方法,但看起来有点笨重.有人知道更好的方法吗?
string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc";
using (var conn = new OleDbConnection(connSrc))
dbc = conn.DataSource;
string path = Path.GetDirectoryName(dbc);
string database = Path.GetFileName(dbc);
using (var conn = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=" + path))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM " + …Run Code Online (Sandbox Code Playgroud) 在下面的StackOverflow 问题中, Jon Skeets的回答指出了一个很好的实现是......
// Note: Not quite FNV!
public override int GetHashCode()
{
unchecked // Overflow is fine, just wrap
{
int hash = (int) 2166136261;
// Suitable nullity checks etc, of course :)
hash = (hash * 16777619) ^ bool1.GetHashCode();
hash = (hash * 16777619) ^ bool2.GetHashCode();
return hash;
}
}
Run Code Online (Sandbox Code Playgroud)
如果两个字段都是bool怎么办?这仍然是一个很好的实现还是会有点矫枉过正?如果这有点过分,那么GetHashCode当所有字段都是bool类型时,推荐的实现方法是什么?
在我的情况下,我只比较两个布尔.
我正在将我们的单元测试从Moles转换为新的VS 2012 Fakes.我们的几个单元测试"假" RNGCryptoServiceProvider.我们能够"mole"这个,但似乎在假货中没有为它创造了Shim.换句话说,我希望找到一个ShimRNGCryptoServiceProvider.
更有趣的一点是,我在网上找到了一本名为"使用Microsoft Fakes进行更好的单元测试"的电子书.在那里,他们展示了伪造随机函数的一个例子.这是一个例子.
System.Fakes.ShimRandom.Constructor = (real) => { };
System.Fakes.ShimRandom.AllInstances.NextDouble = this.NextDouble;
System.Fakes.ShimRandom.AllInstances.NextInt32Int32 = this.NextInt32Int32;
private int NextInt32Int32(Random random, int i, int arg3)
{
return (i + arg3) / 2;
}
Run Code Online (Sandbox Code Playgroud)
我甚至没有在我的项目中看到System.Fakes.ShimRandom.我看到 的唯一两个垫片System.Fakes是ShimDateTime和ShimGuid.
我确实看到了一堆Stubs,包括System.Fakes.StubRandom和System.Fakes.StubRandomNumberGenerator,但是Stubs对我不起作用,因为我无法将它们注入到被测试的代码中.
RNGCryptoServiceProvider?我们使用的第三部分导出应用程序将无法正确呈现段落标记(不包括段落之间的额外行),因此我尝试使用HtmlAgilityPack将所有段落标记替换为两个换行标记.
这是我到目前为止所拥有的......
// Shortened for this example
string rawHtml = "<p><strong><span>1.0 Purpose</span></strong></p><p><span>The role</span></p><p><span>NOTE: Defined...</span></p>";
HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(rawHtml);
doc.OptionWriteEmptyNodes = true;
// Updated using suggestion from Petr
HtmlNode linebreak = doc.CreateElement("br");
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
HtmlNode childNode = HtmlNode.CreateNode(paragraphTags[i].InnerHtml);
HtmlNode nextNode = paragraphTags[i];
if (i > 0)
{
nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
}
doc.DocumentNode.InsertAfter(childNode, nextNode);
paragraphTags[i].Remove();
}
Run Code Online (Sandbox Code Playgroud)
它确实删除了段落标记,但只渲染了一个换行符.我已经搜索了互联网以获得尽可能多的东西,但似乎没有任何效果.
OuterHtml看起来像这样....
<strong><span>1.0 Purpose</span></strong><br …Run Code Online (Sandbox Code Playgroud) 我使用 ASP.Net Core 3.x 和 C# 创建了一个 Windows 服务。我在构建项目时从新的 Windows 服务模板开始。当我从我的开发环境或控制台窗口运行它时,它运行良好。当我将其安装为 Windows 服务并尝试启动该服务时,出现“错误 5:访问被拒绝”。错误。
我尝试了很多事情,我将在下面概述以消除错误,但似乎没有任何效果,所以我下载了 Microsoft 提供的示例应用程序,示例
相同的结果...当我从 Visual Studio 中运行示例应用程序时,它运行良好,作为服务运行时,我收到拒绝访问错误。
我在我是管理员的本地机器上运行所有这些。
我最初尝试使用默认的本地系统帐户运行它;收到拒绝访问错误。我将登录身份更改为我的域帐户,与我用来登录本地计算机的相同,该计算机是本机的管理员;得到相同的访问被拒绝错误。
我的帐户具有作为服务运行的权限集。
事件查看器只显示一条消息“拒绝访问”,没有创建其他消息。
我相信在执行 C# 代码之前就发生了拒绝访问错误。让我相信这是我在 Program.Main.. 的最顶部添加了一行File.WriteAllText("C:\\temp\\ws.log", $"Test of Worker Service @ {DateTime.Now}. Content Root Path: {AppContext.BaseDirectory}");。我的帐户可以完全访问临时文件夹。当我从 Visual Studio 运行应用程序时会创建此文件,但当我将应用程序作为服务运行时不会创建它。
我的想法已经用完了,希望这里有人可以为我提供答案。谢谢!
c# ×9
asp.net-core ×2
.net-4.5 ×1
.net-core ×1
aurelia ×1
boolean ×1
c#-4.0 ×1
cmd ×1
command-line ×1
gethashcode ×1
html ×1
html-parsing ×1
install ×1
java ×1
javascript ×1
oledb ×1
typescript ×1
unit-testing ×1
windows ×1
xslt ×1