升级到csproj以使用Visual Studio 2017和Microsoft.NET.Sdk后,我的"BeforeBuild"和"AfterBuild"目标不再运行.我的文件看起来像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<!-- my targets that don't run -->
<Target Name="BeforeBuild">
<Message Text="Should run before build" Importance="High" />
</Target>
<Target Name="AfterBuild">
<Message Text="Should run after build" Importance="High" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud) 我得到的程序集可以在我的 PC 上正常构建和进行单元测试,但无法在构建 PC 上进行测试。它已经失败了大约一个月。我很可能做错了什么。这是我从构建服务器得到的响应。
16:29:38 Project "xyz.Utilities.UnitTests.csproj": VSTest
16:29:40 Test run for C:\Bin\Release\net5.0-windows\xyz.Utilities.UnitTests.dll (.NETCoreApp,Version=v5.0)
16:29:40 Microsoft (R) Test Execution Command Line Tool Version 16.11.0
16:29:40 Copyright (c) Microsoft Corporation. All rights reserved.
16:29:40
16:29:40 Starting test execution, please wait...
16:29:40 A total of 1 test files matched the specified pattern.
16:29:41 An exception occurred while invoking executor 'executor://mstestadapter/v2': Could not load type 'Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior' from assembly 'Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
16:29:41 Stack trace:
16:29:41 at Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.RunTests(IEnumerable`1 sources, IRunContext runContext, IFrameworkHandle …Run Code Online (Sandbox Code Playgroud) 我已经多次尝试使用类似的技术作为条件内容的"条件引用".
Visual Studio项目文件中的内容条目,例如"web.config",我不希望在发布网站时包含这些条目.
我尝试了一些像......
<Choose>
<When Condition="$(Configuration) != 'Release'">
<ItemGroup>
<Content Include="web.config">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
</ItemGroup>
</Otherwise>
</Choose>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有任何想法吗?或者你以前遇到过这个并解决了吗?
在使用GIT进行源代码控制的.NET C#项目中,我在重新定位后不断收到格式错误的csproj文件以获取最近提交的代码.这是我的过程:
这是rebase的输出:
D:\GitHub\AwesomeProject>git rebase master
First, rewinding head to replay your work on top of it...
Applying: added getstatus call
Using index info to reconstruct a base tree...
M Host/Host.csproj
M Host/packages.config
M Trees/Trees.csproj
M Trees/packages.config
M UnitTests/UnitTests.csproj
<stdin>:1229: trailing whitespace.
<!-- To modify your build process, add your task inside one of the targets bel
ow and uncomment it.
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging …Run Code Online (Sandbox Code Playgroud) Visual Studio 2013.
我有一个外部DLL,我在csproj文件中引用如下:
<ItemGroup>
<Reference Include="NameOfDll">
<HintPath>Path\To\Dll\NameOfDll.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
我希望这个引用在编译器符号存在时起作用,而在编译器符号不存在时不起作用.(为了解决下面的第一条评论,假设编译器符号被称为Fred.)
这个问题[ 条件参考 ]让我觉得我可以在上面显示的Reference元素中添加一个名为Condition的属性,但我无法确定哪个值赋予该属性以实现我想要的效果.
我很高兴能在VS UI中找到一种方法,但我会采取任何方法.
ASP.NET具有特定的应用程序文件夹,例如App_Code:
包含要作为应用程序的一部分进行编译的共享类和业务对象(例如,.. cs和.vb文件)的源代码.在动态编译的Web站点项目中,ASP.NET会根据对应用程序的初始请求编译App_Code文件夹中的代码.检测到任何更改后,将重新编译此文件夹中的项目.
问题是,我正在构建一个Web应用程序,而不是一个动态编译的Web站点.但是我希望能够直接在C#中存储配置值,而不是通过XML提供服务,并且必须在读取Application_Start和存储期间读入HttpContext.Current.Application
所以我有以下代码/App_Code/Globals.cs:
namespace AppName.Globals
{
public static class Messages
{
public const string CodeNotFound = "The entered code was not found";
}
}
Run Code Online (Sandbox Code Playgroud)
这可能是应用程序中的任何位置,如下所示:
string msg = AppName.Globals.Messages.CodeNotFound;
Run Code Online (Sandbox Code Playgroud)
目标是能够将任何文字存储在可以更新的可配置区域中,而无需重新编译整个应用程序.
我可以.cs通过将其构建操作设置为编译来使用该文件,但这样做会App_Code/Globals.cs从我的输出中删除.
问:有没有办法识别项目的某些部分,这些部分应该动态编译,同时允许项目的其余部分进行预编译?
content- .cs文件将被复制到该bin文件夹并在运行时编译.但是,在这种情况下,它在设计时不可用. compile- 我可以在设计/运行时期间访问与任何其他编译类相同的对象,但在发布时它将被删除/ App_Code文件夹.我仍然可以将它放在输出目录中Copy Always,但是已编译的类似乎优先,所以我不能在不重新部署整个应用程序的情况下推送配置更改.而不是*.cs代码后面或旁边我想有一个*.js文件.我正在开发一个MVC应用程序,不需要旁边的代码,因为我有控制器,但在某些情况下,旁边有一个JavaScript代码或某种方式将文件与它正在使用的页面相关联是很好的.我想我可以用类似的方式命名它们,但我想在可能的情况下显示关联,所以毫无疑问该文件的用途.
通常我正在谈论的是在你的Global.asax文件下的Visual Studio中你将在左边有一个加号:
+ Global.asax
Run Code Online (Sandbox Code Playgroud)
一旦你展开它你就会得到
- Global.asax
Global.asax.cs
Run Code Online (Sandbox Code Playgroud)
我想要发生同样的事情:
+ Home.spark
- Home.spark
Home.spark.js
Run Code Online (Sandbox Code Playgroud)
更新:
我现有的csproj文件有一个指向实际文件的路径,不确定是否会将其搞砸.我现在有:
<ItemGroup>
<Content Include="Views\User\Profile.spark.js">
<DependentUpon>Views\User\Profile.spark</DependentUpon>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="Views\User\Profile.spark" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
它只是显示彼此之外的文件.
我需要在~15个项目中设置一系列属性.有没有办法将这些属性放在一个文件中,并让所有项目文件使用某种导入指令引用一个文件,而不是复制每个项目文件中的属性?
编辑:澄清一下,我在谈论<PropertyGroup>csproj文件中的元素.所有项目都需要相同的一系列<PropertyGroup>设置.这些元素设置类似DebugSymbols或的属性DefineDebug,不用于引用源文件.
csproj ×10
c# ×4
.net ×3
msbuild ×2
.net-core ×1
asp.net ×1
asp.net-mvc ×1
build-error ×1
git ×1
git-rebase ×1
unit-testing ×1