而不是*.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)
它只是显示彼此之外的文件.
我正在定制一个.csproj项目,在主构建之前运行一些自定义任务.但是,我根本无法执行任务.
我取消注释文件中的<Target Name="BeforeBuild" />元素.csproj并添加了一个简单的Message任务,但是当我构建时,消息没有出现在我的输出中,所以看起来任务没有运行.所以这个片段不输出消息;
清单1:没有消息出现
<Target Name="BeforeBuild">
<Message Text="About to build ORM layer" Importance="normal" />
</Target>
Run Code Online (Sandbox Code Playgroud)
但是,如果我搞砸了一些属性,我可能会.csproj完全无法执行;
清单2:MSBuild配置错误
<Target Name="BeforeBuild">
<Message Text="About to build ORM layer" XXImportance="normal" />
</Target>
Run Code Online (Sandbox Code Playgroud)
注意XXImportance属性.我得到的构建错误是
My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property.
Run Code Online (Sandbox Code Playgroud)
这表明正在解析XML,Message已找到该类,并且该类正在反映可用属性.
为什么这个任务不会执行?
我正在使用3.5框架.
更新1:在@Martin的建议下,我试图在控制台上运行MSBuild,并得到了这个错误;
c:\path\to\my.csproj(74,11): error MSB4019: The imported …Run Code Online (Sandbox Code Playgroud) 我需要在~15个项目中设置一系列属性.有没有办法将这些属性放在一个文件中,并让所有项目文件使用某种导入指令引用一个文件,而不是复制每个项目文件中的属性?
编辑:澄清一下,我在谈论<PropertyGroup>csproj文件中的元素.所有项目都需要相同的一系列<PropertyGroup>设置.这些元素设置类似DebugSymbols或的属性DefineDebug,不用于引用源文件.
我对.csproj文件中的函数和条件完全陌生,所以我们非常感谢所有的帮助.
我想要做的是检查当前配置中的特定编译器指令.一个例子如下:
<Choose>
<When Condition= [current configuration has CONST-1 compiler constant defined] >
...
</When>
<When Condition= [current configuration has CONST-2 compiler constant defined] >
...
</When>
</Choose>
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可能.如果有更好的方法来做我要求的事情让我也知道.无论哪种方式,我想测试一个独立于配置的条件.
编辑
我真正想要的是一个我可以轻松编辑的值,最好是在Visual Studio中编辑,我也可以检查一下configuraiton.我考虑过编译器常量,因为您可以在VS的Project Properties中轻松更改它们.
我有一个Visual Studio(Community 2013)解决方案,我的电脑上有许多c#项目,我刚刚从7升级到Windows 10.该项目使用.Net Framework 4.0 Client Profile.在win7上一切正常,但现在其中一个项目似乎没有加载引用.引用项目附近有黄色三角形,不是同一解决方案引用的项目(因此NuGet下载的系统和引用未加载).
该资源是在解决方案的另一个项目,别人不行.当我打开系统引用的属性选项卡时,该Path字段为空,因此该Resolved字段为False...
此外,在.csproj文件中,一切似乎都没问题,有需要的<HintPath>节点,相对(或绝对,如果引用在另一个驱动器上),以及正确的现有路径.
另一个奇怪的事情是:在对象浏览器中,所有引用都是(看似)加载的:
所以我该怎么做:
您有一个包含大量项目文件的大型Visual Studio解决方案.如何验证所有项目是否遵循其属性设置中的某些规则,并在添加新项目时强制执行这些规则.例如,检查所有项目是否:
TargetFrameworkVersion = "v4.5"
Platform = "AnyCPU"
WarningLevel = 4
TreatWarningsAsErrors = true
OutputPath = $(SolutionDir)bin
SignAssembly = true
AssemblyName = $(ProjectFolderName)
Run Code Online (Sandbox Code Playgroud)
我自己知道两种方法,我将在下面的答案中添加,但我想知道人们如何进行这种类型的项目测试.我特别感兴趣的是要了解可用的解决方案,例如库或构建任务,而不必创建新的东西或从头开始编写.
我们假设我已经有一个构建.NET 3.5程序集的项目.现在我想为Silverlight构建这个程序集,而且,只需要进一步努力就可以维护它的Silverlight版本.
什么是不可接受的:
什么是可接受的:
基本上,我想维护一个项目,但目标是两个框架.我不想维护两个单独的项目,因为这可能会导致错误,例如忘记包含新文件.如果有很多项目和大团队,那么排除这些错误非常重要.
如果这完全不可能,任何提供类似好处的解决方案都是可以接受
关于上一个问题,我试图创建一个批处理文件,作为部分必须删除并添加对XML*.csproj文件的引用.我已经看过这个,这个,这个和这个以前的问题,但作为一个PowerShell的n00b我无法得到它的工作(到目前为止).
任何人都可以帮助我以下?我想删除VS2010 csproj文件(XML)中的两个特定引用并添加新引用.
我打开了csproj,可以在以下位置找到引用
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- ... -->
<!-- Omitted for brevity -->
<!-- ... -->
<ItemGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">
<AvailableItemName Include="Effect" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SomeDirectory\SomeProjectFile.csproj">
<Project>{AAB784E4-F8C6-4324-ABC0-6E9E0F73E575}</Project>
<Name>SomeProject</Name>
</ProjectReference>
<ProjectReference Include="..\AnotherDirectory\AnotherProjectFile.csproj">
<Project>{B0AA6A94-6784-4221-81F0-244A68C374C0}</Project>
<Name>AnotherProject</Name>
</ProjectReference>
</ItemGroup>
<!-- ... -->
<!-- Omitted for brevity -->
<!-- ... -->
</Project>
Run Code Online (Sandbox Code Playgroud)
基本上我想:
作为一个非常简单的示例,我尝试了以下powershell脚本来删除所有ProjectReference节点.我将路径传递给csproj作为参数.我收到了错误Cannot validate the argument 'XML'. The Argument is null or empty …
这个问题是二合一的,但两者都与同一个问题有关.
我们是由10个开发人员组成的团队,一些开发人员更喜欢使用IIS的完整实例,而其他开发人员更喜欢使用IIS-Express.使用其中任何一个都是值得的,例如,IIS最类似于生产,而IIS-Express允许编辑并继续调试.
除了10个开发人员工作团队,我们正在使用源代码控制,我们有一个分支结构.每个分支可能具有不同的web.config/app.config设置,例如数据库连接字符串.开发人员可能一次在多个分支上工作,因此我们通常每个分支都有一个数据库,我们正在查看具有本地数据库的开发人员,但无论采用何种方法,命名冲突仍然是一个问题(即开发人员可能有2个本地数据库,每个分支一个).
第一个问题是带有csproj文件的问题,特别是Web服务器设置.如果一个开发人员签入使用IIS-Express的csproj文件,而另一个开发人员执行Get Latest,则会覆盖他们的配置,浪费时间并造成挫败感.
当然,最简单的解决方案是强制每个人使用一个工具,一个配置,但我宁愿不这样做,特别是对于与结果输出无关的东西(编译代码).
第二个问题是配置文件,配置文件存储在源代码控制中(就像任何其他文件一样),因此当我们进行分支合并时,这些文件必须在之后手动更新.我知道有配置文件的调试和发布转换,我们可以在两者中都有不同的连接字符串,但这并不能解决两个开发人员可能在同一分支上工作但具有不同连接字符串的问题.
显而易见的解决方案是每个人总是拥有完全相同的设置,但是一些开发人员可能想要使用LocalDB实例,其他人可能想要使用SQL-Express,而登台服务器使用完整的SQLServer实例.同样,这是另一个与最终结果无关的设置.
在管理团队成员之间的配置以及分支/合并之间,我没有看到任何解决我的特定问题的方法.
csproj ×10
c# ×5
.net ×4
msbuild ×4
powershell ×2
build ×1
prebuild ×1
psake ×1
silverlight ×1
windows-10 ×1
xml ×1