我有VS 2008和csproj项目(C#Library).
在项目的属性中,具有程序集名称和默认名称空间.注意:每个类都有一个名称空间.
是否有可能在运行时获取默认命名空间的值?
我的目标是使用资源,我需要默认命名空间的值:
Assembly assembly = Assembly.GetExecutingAssembly();
//foreach (string resourceName in assembly.GetManifestResourceNames()){}
Stream syntaxModeStream = assembly.GetManifestResourceStream(pathToResources
+ ".SyntaxModes.xml");
Run Code Online (Sandbox Code Playgroud)
更新:
彼得说我做不到.默认命名空间不存储在程序集中
var resource = assembly.GetManifestResourceNames().Single(p => p.EndsWith(".SyntaxModes.Xml"))
Run Code Online (Sandbox Code Playgroud)
存储的默认命名空间在哪里?
我只能使用Addins Visual Studio(DTE对象)阅读?
在.csproj文件中,Visual Studio和Xamarin Studio默认保留对项目内使用的每个文件的引用.
<ItemGroup>
<Compile Include="Utils\Foo1Utils.cs" />
<Compile Include="Utils\Foo2Utils.cs" />
<Compile Include="Services\FooService.cs" />
...
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
为了避免在每次添加文件时我们的解决方案中的csproj文件发生冲突,我们开始使用通配符:
<ItemGroup>
<Compile Include="Utils\*.cs" />
<Compile Include="Services\*.cs" />
...
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
问题是,似乎都在Visual Studio和Xamarin Studio是不可能的"解释"对我们使用通配符的IDE,当我们添加一个新的文件到项目中,他们添加一个新的参考文件忽略通配符*.cs上文件夹.它仍然是一个很好的解决方案,因为我们不需要在每次添加文件时都提交.csproj,但现在我们必须每次都重置它们......任何人都知道是否有解决方案?
编辑:与Rider(JetBrains)没有这个问题,如果在csproj中有一个通配符,我添加一个新文件一切正常.
我正在使用.NET Core构建跨平台类库.根据为使用.csproj文件构建C#.NET Core项目的操作系统,我需要将本机库复制到项目的输出目录.例如,对于OS XI想要复制.dylib文件,对于Windows我要复制.DLL文件,对于Linux我要复制.so文件.
如何使用.csproj ItemGroup中的Condition子句执行此操作?
<ItemGroup>
<Content Include="libNative.dylib" Condition=" '$(Configuration)|$(Platform)' == 'Debug|OSX' ">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
$(Platform)似乎不起作用.我可以使用不同的变量吗?
我正在使用新的.csproj文件格式来打包NuGet包,而不使用.nuspec文件.
问题是,它将我的dll放在\ lib \中我需要把它放在\ analyzers \
我是谁做到的?
虽然我发现这篇关于在程序集上检索自定义属性的帖子,但我不确定如何在.NET Core 1.1中为程序集添加自定义属性.在.NET Framework中,我会做类似的事情:
[assembly: AdditionalLocation(@"..\ReadFromHere")]
Run Code Online (Sandbox Code Playgroud)
但我在Visual Studio中的netcore1.1项目没有AssemblyInfo.cs.我在哪里声明程序集的自定义属性?我可以在.csproj文件中放一些东西吗?
在.NET完整框架中,可以在发布版本生成的堆栈跟踪中包含文件名和行号,方法是在输出中包含调试信息并将调试信息设置为pdb-only或full.在ASP.NET Core和Azure Function Apps中工作时,如果将生成的XML添加到项目文件中,这些选项似乎不再可以通过UI访问或工作.当我创建一个新项目并在发布模式下运行它时,文件名和行号不是堆栈跟踪的一部分.
如何在ASP.NET Core中的发布版本中包含文件名和行号?
更新:重新创建的步骤!
添加新的异常记录中间件:
app.Use(async (context, next) =>
{
try
{
await next.Invoke();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
});
Run Code Online (Sandbox Code Playgroud)
在生成的默认值中抛出异常ValuesController:
[HttpGet]
public IEnumerable<string> Get()
{
throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)
构建项目(调试/发布无关紧要).使用exe文件运行应用程序并点击/ api/values.Stacktrace不包含文件名和行号:
System.Exception: Exception of type 'System.Exception' was thrown.
at WebApplication50.Controllers.ValuesController.Get()
at lambda_method(Closure , Object , Object[] )
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()
Run Code Online (Sandbox Code Playgroud)
(我不希望这变成一个优点/缺点.我知道有些人认为包含这些信息是死亡罪,有些人不这样做:)
好吧,问题是我没有安装Visual Studio而且我不想安装它,因此,我制作了一个批处理文件来编译我的.csproj文件和所有源文件.
问题是我不知道如何包含.dll文件.这是我的.csproj文件的当前代码:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AssemblyName>Project</AssemblyName>
<OutputPath>Bin\</OutputPath>
</PropertyGroup>
<ItemGroup>
<!-- .cs files -->
<Compile Include="program.cs" />
</ItemGroup>
<Target Name="Build">
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我需要更改什么才能将dll文件包含/引用到编译过程中?
编辑:我编辑了整个问题,因为这不仅适用于Unity3D,而且适用于所有.sln项目.
我在工作中的Macbook上安装了Visual Studio Code(非Visual Studio,但是这个:https://code.visualstudio.com/).对于普通和Unity3D项目,VSCode正常工作.我在所有类上获得Intellisense,包括Unity3D特定的类,如GameObject.所以我认为我的安装和启动顺序是正确的.
我遇到的唯一问题是VSCode似乎没有识别.csproj文件中定义的常量.首先我注意到了一些Unity3D插件,但它在普通的Visual Studio项目中也是持久的.
我的示例项目是从互联网上下载的虚拟应用程序,但它完全适用于MonoDevelop.这是我的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DummyConsoleApplication
{
class Program
{
static void Main(string[] args)
{
tester();
}
#if DEBUG
static void tester(){
}
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
Main中的函数调用导致编辑器上找不到异常,但它编译得很好,因为.csproj文件有这一行:
<DefineConstants>DEBUG;TRACE</DefineConstants>
Run Code Online (Sandbox Code Playgroud)
如果这是VSCode的正常行为的任何验证将非常感激.此外,如果有人知道任何解决方案,甚至是hacky,解决这个错误并强制Intellisense自动完成也会有所帮助.
我得到的错误是:
The name 'tester' does not exist in the current context [DummyConsoleApplication]
Run Code Online (Sandbox Code Playgroud)
我的硬件是带Yosemite的Macbook,我的编译器是dnx-mono.1.0.0-beta4.
我有一个带有经典参考的.NetCore平台的.csproj。我正在为开发环境使用该属性。但是我应该在 CI 环境中构建csproj,其中引用的程序集放置在不同的目录中。在经典的net4 上,我使用了MSBuild工具的参数。但是“dotnet build”没有类似的论点。作为后备,我找到了“dotnet msbuild”命令,但此工具忽略了该参数并向我显示hintpath/p:ReferencePath/p:ReferencePath=xxx
警告 MSB3245:无法解析此引用。找不到程序集“AssemblyName”。检查以确保程序集存在于磁盘上。如果您的代码需要此引用,您可能会收到编译错误。
请指导我,我可以检查什么,dotnet-build / dotnet-msbuild工具在哪里搜索引用的程序集以及如何指定该目录?
希望进行以下设置:
我正在开发 Blazor 应用程序,并使用官方的 css 隔离捆绑器。不过,我使用的是Less,并安装了 Less 转换器,它在构建时创建所需的 css。
然而,通过运行我的应用程序dotnet watch run,它现在通常会陷入无限循环。
其原因可能是dotnet watch run看到文件发生更改*.razor.css、重建,并且循环不断重复。
所以这是我的问题:
如何配置我的 csproj(新的网络标准格式)以**\*.razor.css从监视过程中排除?如果它从我的 VS 解决方案整体中消失也没关系。
csproj ×10
.net-core ×5
c# ×5
msbuild ×3
.net ×2
asp.net-core ×1
c#-4.0 ×1
compilation ×1
constants ×1
dotnet-tool ×1
namespaces ×1
nuget ×1