这让我疯狂了几个月,我仍然无法实现它.我的托管库是从Nuget包中提取的,但不是本地的.
我们有一堆由其他公司提供的托管和本地库.我们有它们x86和x64它们的版本.为了在ASP.NET Core项目中使用它们,我必须创建一个Nuget包.
我的架构是:
当然,最后,我需要将我的本机库提取到网站的正确运行时文件夹(例如:) \bin\Debug\net461\win7-x64.
目前我的解决方案是:
build文件夹中targets将它们复制到的文件$(OutputPath)(甚至不是运行时文件夹)xproj我的网站,以获取我的$(USERPROFILE)\.nuget\packages\文件夹中的目标文件并执行它bin文件夹中提取的本机DLL 到runtime一个我试图使用一些配置直接将它们复制到运行时文件夹中project.json(我真的不记得我为这部分尝试过的所有事情),但这总是失败.即使我SkipUnchangedFiles="true"在我的目标文件中指定,这只是被忽略,我的DLL在每次构建期间被复制到我的bin文件夹.
这是一个重要的过程,只是为了实现DLL提取,现在我真的想摆脱所有MsBuild并得到一个更简单的解决方案.
我知道Nuget的新版本,它现在能够在没有添加自定义MsBuild命令的任何帮助的情况下原生提取它们.至于写在这里,C#项目甚至不需要一个targets文件
接下来,可能使用NuGet包的C++和JavaScript项目需要.targets文件来标识必要的程序集和winmd文件.(C#和Visual Basic项目会自动执行此操作.)
我在我的浏览器中打开了一个标签,持续了几个月(原始链接),并意识到此资源最近已从Nuget网站上删除.它解释了如何使用该runtimes文件夹自动提取本机DLL.然而,我从来没有能够得到一个成功的结果,因为它被解释.现在,这个页面已被删除,取而代之的这一个有这么一些解释,而不是谈论这个runtimes文件夹的.
我的猜测是我应该使用runtimes本机DLL的文件夹和lib托管的那个,但我不是100%肯定.(我也应该使用该build文件夹吗?)
我已经尝试了几件事(我记不起尝试次数,正如我所说的几个月的头痛......)就像这样的架构(我不明白这有什么意义,build/native还有本机文件夹runtimes)

我还尝试使用此处描述的.NET框架版本结构用于托管库.
这似乎也是解决方案的一部分
创建程序集引用时,编译器会忽略该体系结构.这是一个加载时间概念.如果存在,加载程序将更喜欢体系结构特定的引用. …
我正在尝试创建一个由4个项目组成的ASP.NET 5解决方案的图像.这是结构:
我有一个简单的Dockerfile,如下所示:
FROM microsoft/aspnet
COPY . /app
WORKDIR /app
RUN ["kpm", "restore"]
EXPOSE 5004
ENTRYPOINT ["k", "kestrel"]
Run Code Online (Sandbox Code Playgroud)
但不知道在哪里放.在我的解决方案的根文件夹中,global.json是在我的Project.json所在的Web Application文件夹中?当然我已根据此文件的位置对其进行了修改.
无论如何两者似乎都有效,因为它在运行命令时下载了我需要的所有库
docker build -t quizzcorrector.
我的问题是码头工人告诉我的那一刻
无法找到Models> = 1.0.0
无法找到FlashTools> = 1.0.0
无法找到QuizzService> = 1.0.0
我在这个帖子上看到https://github.com/aspnet/aspnet-docker/issues/19在多项目解决方案中我们应该运行命令"kpm pack"将我的应用打包成可部署和可运行的形式.
我找不到任何带有kpm pack命令的Dockerfiles的例子,只有文档:https://github.com/aspnet/Home/wiki/Package-Manager
我当然也尝试在我的Dockerfile中使用ADD或COPY命令将我的项目内容复制到容器的文件系统中,但仍然是同样的错误.
谢谢你的帮助
所以现在似乎是一个悬而未决的问题.所以我想在完成这项工作之前我将不得不依赖.NET Core API参考并祈祷我不会打到其中一个,43 APIs that .NET Framework 4.6.1 doesn't support但官方认为...
同样依赖.NET Core API参考并考虑与.NET标准相同可能会非常令人惊讶.例如,当我查看命名空间列表时,我可以看到,System.Drawing但是当点击它时,我们意识到这是一个几乎空的命名空间,只包含6个结构.
有这样的几个名称空间吗?我不知道我必须比较.NET核心和.NET Framework文档才能得到答案.
我正在尝试找到.NET Standard API参考.
在此页面上只有指向.NET Core API reference和的链接.NET Framework API reference.
是的我已经搜索过,而且我已经阅读了其他的SO问题.例如,这个答案指向.NET Core API引用而不是.NET标准,并且在此Github问题源中也是如此
但.NET Core和.NET Standard是不同的..NET Core实现.NET标准API.
我在这里看到的一个大问题是例如基于官方文档 .NET Framework 4.6.1将实现.NET Standard 2.0
好的,除了.NET Standard Github自述页面也在说
另一方面,.NET Standard 2.0添加了许多.NET Framework 4.6.1已经支持的API.delta看起来如下:
.NET Standard 2.0添加了.NET Framework 4.6.1已支持的14,994个API
.NET Standard 2.0只有43个.NET Framework …
我有一个 .NET Standard 2.0TestSouceLink项目,其配置如下.csproj:
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<Authors>Jérôme MEVEL</Authors>
<Description>Just a test package for SourceLink</Description>
<Version>1.1.1</Version>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.Vsts.Git" Version="1.0.0-beta2-18618-05">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我们有一个 Azure DevOps 服务器,它在构建管道中生成我们的 Nuget 包。
我Publish symbols path在最后添加了一个任务来将.pdb文件推送到 Symbol Server,并且我设法让 Source Link 与 Azure DevOps Symbol Server 一起工作,仅使用Debug构建配置。
问题是我不希望在调试模式下生成 Nuget 包中的 DLL。我希望它们是Release。但是当我将dotnet pack任务更改为Release在Configuration to package文本框中使用时,源链接不再起作用。 …
我正在尝试从API控制器返回表示jpeg图像的base64字符串,并将其设置为src,<img>但我的所有尝试都失败了.
这是非常简单的HTML:
<img src="/api/TestBase64Image" alt="image test" />
Run Code Online (Sandbox Code Playgroud)
而我的控制器:
[Route("api/[controller]")]
public class TestBase64ImageController : Controller
{
private const string _base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/7Sfg.....";
private const string _base64Image2 = "/9j/4AAQSkZJRgABAQEBLAEsAAD/7Sfg.....
[HttpGet]
public async Task Get()
{
Response.ContentType = "image/jpeg";
//Response.ContentType = "text/plain";
//Response.ContentType = new MediaTypeHeaderValue("image/jpeg").ToString();
//Response.ContentType = new MediaTypeHeaderValue("text/plain").ToString();
//Response.Headers.Add("Content-Length", _base64Image.Length.ToString());
//HttpContext.Response.ContentLength = _base64Image.Length;
await Response.Body.WriteAsync(Encoding.UTF8.GetBytes(_base64Image), 0, _base64Image.Length);
//await Response.Body.FlushAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事,比如删除FlushAsync(),改变了在字符串中定义ContentType,包含的方式data:image/jpeg;base64,但没有任何工作.
我在这里和这里看到,在Response体流中写作是可行的,所以我认为我的方法很好(我之前尝试过返回一个简单的字符串但不能正常工作).
是的,我的base64字符串是正确的,因为我还试图将它直接包含在HTML中,图像显示正确.
我确切地说我不想使用任何JavaScript或Razor视图来实现这一点,只有纯HTML和我的控制器.
另请注意我在API控制器中.我不能像我们在一个空的ASP.NET Core项目Configure的 …
我正在尝试将 Nuget 包中的内容文件提取到引用我的包的项目中。
Packages.config 项目使用 content 文件夹
Project.json/PackageReference/NETCore SDK 项目使用 contentFiles 文件夹
太好了,我创建了一个 .NET Core 2.1 控制台应用程序项目,并遵循了NuGet ContentFiles Demystified博客文章,该文章于 2016 年撰写,project.json但现在仍然可以使用。
我创建了一个图像,c:\dev\ContentFilesExample\contentFiles\any\any\images\dnf.png然后创建了一个c:\dev\ContentFilesExample\ContentFilesExample.nuspec文件并复制粘贴了内容:
<?xml version="1.0"?>
<package>
<metadata minClientVersion="3.3.0">
<id>ContentFilesExample</id>
<version>1.0.0</version>
<authors>nuget</authors> <!-- The NuGet team authored this package -->
<owners>nuget</owners> <!-- The NuGet team owns this package -->
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>A content v2 example package.</description>
<tags>contentv2 contentFiles</tags>
<!-- Build actions for items in the contentFiles folder -->
<contentFiles>
<!-- Include …Run Code Online (Sandbox Code Playgroud) 互联网上有几种关于如何使用符号源文件和Source Link在Nuget包中进行调试的记录方法,但说实话,很难理解什么对我来说是好方法。
我们有一个Azure DevOps服务器,在其上生成Nuget程序包,同时.pdb使用Index Sources & Publish Symbols构建管道中的任务将文件发布到Azure DevOps Symbol Server ,如下所述
我的项目中也有Microsoft.SourceLink.Vsts.Git对此.csproj文件的引用和此代码
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
Run Code Online (Sandbox Code Playgroud)
我看过几篇博客文章,但是我最信任的最新资源当然是官方的Source Link Git仓库。
该readme.md文件说
通常不建议在.nupkg中包含PDB,因为这会增加包的大小,从而为使用您的包的项目恢复时间,无论用户是否需要通过库的源代码进行调试
我同意这一点,这就是为什么我要使用Symbol Server而不.pdb在Nuget软件包中包含文件的原因。因此,请不要将我的问题标记为与此问题重复,因为接受的答案正是我不想做的。
自述文件还指出:
.snupkg符号包有一些限制:
- 它们当前不支持Windows PDB(由VC ++生成,或者对于将构建属性DebugType设置为full的托管项目)
- 他们要求该库由较新的C#/ VB编译器构建(Visual Studio 2017 Update 9)。
- 程序包的使用者还需要Visual Studio 2017 Update 9调试器。
- Azure DevOps Artifacts服务不支持。
所以至少我知道我不能使用它。
但是,设置并运行Source Link的正确方法是什么?
当我调试测试控制台应用程序时,它成功将.pdb文件下载到我的Symbols缓存文件夹中,但是如果我尝试使用进入来自我的Nuget包的代码F11,那将是行不通的。(但是System.String.Concat由于我的简单测试Nuget Package实际上是连接一些字符串,所以它介入了)
我试着跑步sourcelink test TestSourceLink.pdb但得到了error: url …
debug-symbols visual-studio nuget-package sourcelink azure-devops
我正在尝试理解新的 C# 类型Span<T>
在阅读 Microsoft 的文章All About Span: Exploring a New Mainstay时,我在该What Is Span<T>?部分的底部看到了
除了已经提到的之外,跨度还提供了许多好处。例如,span 支持重新解释强制转换的概念,这意味着您可以将 a 强制转换
Span<byte>为 aSpan<int>(其中第 0 个Span<int>索引映射到 的前四个字节)Span<byte>。这样,如果您读取字节缓冲区,则可以将其传递给安全有效地以整数形式对分组字节进行操作的方法。
他们在本文中没有提供任何示例,但我最终在Adam Storr 的文章中使用以下MemoryMarshal.Cast方法找到了执行此操作的(新方法)
然而,当我尝试这样做时,我得到了一个奇怪的结果
var byteArray = new byte[] { 1,0,0,0, 0,1,0,0};
Span<byte> byteSpan = byteArray;
Span<int> intSpan = MemoryMarshal.Cast<byte, int>(byteSpan);
Run Code Online (Sandbox Code Playgroud)
微软的文章说the 0th index into the Span maps to the first four bytes of the Span。因此,通过创建 8 个字节的数组,我得到了 2 …
我正在尝试在ASP.NET 5中上传文件,但我在互联网上看到的两种方式都失败了.使用XMLHttpRequest,这是我的服务器端代码:
public async Task<ActionResult> UploadSWF()
{
StreamReader reader = new StreamReader(Request.Body);
var text = await reader.ReadToEndAsync();
return View();
}
Run Code Online (Sandbox Code Playgroud)
[编辑1]:我的客户方:
var client = new XMLHttpRequest();
function upload()
{
var file = document.getElementById("uploadfile");
var formData = new FormData();
formData.append("upload", file.files[0]);
client.open("post", "/Home/UploadSWF", true);
//client.setRequestHeader("Content-Type", "multipart/form-data");
client.setRequestHeader("Content-Type", "application/x-shockwave-flash");
client.send(formData);
}
Run Code Online (Sandbox Code Playgroud)
但我唯一能从中得到的是:
------ WebKitFormBoundaryX1h5stVbtaNe6nFw Content-Disposition:form-data; NAME = "上传"; filename ="data.swf"内容类型:application/x-shockwave-flash CWS;"
[编辑2]:这是我如何得到这个代码:
public ActionResult UploadSWF()
{
Stream bodyStream = Context.Request.Body;
var sr = new StreamReader(bodyStream);
var test = sr.ReadToEnd();
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Visual Studio Team Services REST API编写一个JavaScript客户端,它将AJAX请求发送到我们自托管的Team Foundation Server 2015,但我面临跨域问题.
API需要凭据进行身份验证,但由于安全原因,浏览器会阻止我的请求,因为参数Access-Control-Allow-Origin是使用通配符设置的*.
我试图在IIS管理器中的HTTP响应标头中添加此参数,也在TFS web.config文件中添加(实际上是相同的),但是我收到一个错误,告诉我这个参数有两个不同的值(例如:*和http://localhost:58785),应该只有一个.我想这个值已经在库的代码中定义,我无法访问,因为TFS Web服务已经在IIS上编译和运行.
我还尝试<location allowOverride="false">在web.config中使用标记,禁止配置覆盖,但在这种情况下TFS将无法启动.
有人已经在这里询问了这个问题,并且还在uservoice上发布了一张票,但由于API的名称非常模糊(Visual Studio Online REST API),我不知道这个人是否在线谈论真正的Visual Studio或者他的case与我的相同(自托管TFS服务器).
我们已经在C#中实现了一些运行良好的功能,但现在我们确实需要实现一个JavaScript客户端.编写Web服务并将其用作查询API的代理对我们来说真是一团糟,我们不想这样做.
这太可悲了,我们无法向API发送AJAX请求,因为我们无法更改配置.
c# ×5
asp.net-core ×4
.net-core ×3
nuget ×3
.net ×2
azure-devops ×2
sourcelink ×2
ajax ×1
arrays ×1
asp.net ×1
base64 ×1
cors ×1
cross-domain ×1
docker ×1
image ×1
marshalling ×1
tfs-2015 ×1