上下文:在项目属性中设置程序集名称/默认名称空间(右键单击项目,属性,应用程序选项卡;或编辑.csproj)。
我想在其中添加一个参数,以使它们在项目名称后面加上一些自定义后缀。因此,如果我重命名项目,则程序集名称/命名空间将跟随该重命名。
示例:名为foo
的项目→ foo_suffix.dll 。如果我将项目重命名为foo1
→ foo1_suffix.dll 。
命名空间的行为相同。
阅读Common macros for MSBuild commands and properties,
我尝试在VS和.csproj文件中都输入$(ProjectName)
,但得到一个完全一样的.dll。
我该怎么做?
答案 0 :(得分:1)
我该怎么做?
1 。尝试使用this document中的$(MSBuildProjectName)
属性。
您正在开发C# project(csproj)
时,上面的文档大约是macros in C++ projects(vcxproj)
。因此,我认为$(MSBuildProjectName)
属性在经过几次测试后可能更适合您。
(我尝试了$(ProjectName)
,但是只有在设置类似<AssemblyName>$(ProjectName)</AssemblyName>
的情况下它才能很好地工作,如果我添加了类似$(ProjectName)_suffix
的后缀,有时输出为{{1 }}。但是如果我使用_suffix.dll
)
我得到了想要的行为,但这与我所能做的不一致 在项目的“属性”,“应用程序”选项卡中查看。
2 。尝试重新加载项目文件($(MSBuildProjectName)!
)以更新UI。
从您的评论看来,Right-click project, unload.., reload...
在您的计算机上运行良好?如果是这样,您仍然可以使用$(ProjectName)_suffix
属性。
您遇到的是Msbuild和VS的预期行为。 VS将在$(ProjectName)
期间从csproj
读取值。然后通过UI显示相关值。
因此,在重命名项目名称并构建项目之后,我们可以在输出文件夹中获得project loading process
。但是用户界面仍然没有更改(不一致),因为现在我们需要更新用户界面。
您可以ProjectName_suffix.dll
更新UI。现在输出xx.dll可以与您在right-click project node, unload the project=>reload the project
中看到的一致。每次您重命名项目后,都需要我们重新加载项目,然后UI才能与xx.dll保持一致。实际上,即使用户界面未更新,它也不会影响您的构建,输出可能是您想要的行为。
3 。以上所有与project, Properties, Application tab
之间的关系有关。您应该知道的一点是,Assembly Name and Project Name
(csproj)在创建项目后不会修改源文件(xx.cs)。
因此,假设您有一个名称空间为msbuild
的{{1}}文件。如果将项目重命名为Class1.cs
,请重新加载项目,然后您可以在Library
中看到命名空间为NewLibrary
。但是Class1.cs文件的命名空间仍旧为NewLibrary
。这是VS中的预期行为,如果创建新的xx.cs 文件,则新的NameSpace project, Properties, Application tab
可以使用。
希望以上所有都对您有帮助:)